1.创建数据库表
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
CREATE TABLE IF NOT EXISTS `student` ( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号', `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名', `pwd` VARCHAR(15) NOT NULL DEFAULT '12345' COMMENT '密码', `gender` VARCHAR(3) NOT NULL DEFAULT '女' COMMENT '性别', `birthday` DATETIME DEFAULT NULL COMMENT '出生日期', `address` VARCHAR(30) DEFAULT NULL COMMENT '家庭住址', `email` VARCHAR(30) DEFAULT NULL COMMENT '邮箱', PRIMARY KEY(`id`) )ENGINE = INNODB DEFAULT CHARSET = utf8
|
2.三个常用命令
1 2 3 4 5 6 7
| SHOW CREATE DATABASE school
SHOW CREATE TABLE `student`
DESC student
|

3.数据表的类型
关于数据库引擎:(了解)
默认使用INNODB,
早些年使用MYISAM。
两者的区别:

补充:INNODB 5.6.4后支持了全文索引。
所有数据库文件都存在data目录下,一个文件夹对应一个数据库。
数据库本质还是用文件存储。

了解内容。
charset设置数据库表的字符集编码。
不设置的话,默认的不支持中文。
修改编码:
- 创建数据库的时候就加上
charset=utf8
- 在my.ini配置默认编码
character-set-server=utf8
4.修改和删除表和表字段
修改表和表字段:
1 2 3 4 5 6 7 8 9 10 11
| ALTER TABLE teacher RENAME AS teacher1;
ALTER TABLE teacher ADD age INT(11);
ALTER TABLE teacher MODIFY age VARCHAR(11);
ALTER TABLE teacher CHANGE age age1 INT(1); !! 注意两者的区别
|
修改之后在sqlyog左侧栏刷新一下,看到效果。
删除表和表字段:
1 2 3 4 5
| ALTER TABLE teacher DROP age1;
DROP TABLE IF EXISTS teacher ;
|
所有的创建和删除尽量加上IF判断、以免报错。
总结:
1 2 3 4 5 6
| 修改表名 :ALTER TABLE 旧表名 RENAME AS 新表名 添加字段 : ALTER TABLE 表名 ADD字段名 列属性[属性] 修改字段 : ALTER TABLE 表名 MODIFY 字段名 列类型[属性] ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性] 删除字段 : ALTER TABLE 表名 DROP 字段名
|
5.MySQL的数据管理
5.1 外键
物理外键、了解即可。
创建方式一:创建表的时候增加约束 ,麻烦。
删除有外键关系的表:必须先删除引用别人的表,再删除被引用的表。
创建外键方式二 : 创建表的时候没有外键关系。
1 2 3
| ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
|
以上操作都是物理外键,数据库级别的外键,避免数据库过多造成困恼。
不建议使用。
最佳实践
- 数据库就是单纯的表,只存数据,行(数据),列(字段)
- 想使用多张表的数据,想使用外键,(程序级别实现)
阿里Java规范:强制不得使用外键与级联,一切外键概念必须在应用层解决。
5.2 DML:数据库操作语言(全部记住)
数据库的意义:数据的存储和管理。
DML:增删改查必须都记住。
5.3 添加
1 2 3 4 5
| INSERT INTO 表名(字段名1,字段名2,字段名3,...) VALUES('值1','值2','值3',...)
INSERT INTO 表名(字段名1,字段名2,字段名3,...) VALUES('值1','值2','值3',...),('值1','值2','值3',...),('值1','值2','值3',...),(...)
|
由于主键自增,往往省略主键的添加。
一般写插入语句,数据与字段一定要一一对应。
字段是可以省略的(一个都不写),但是后面的所有值一定要一一对应,不能少 。不建议这样写。
插入多行:
1 2 3 4 5 6 7 8
| insert into `grade`(`gradename`) values ('xxx1'), ('xxx2');
INSERT INTO student(`name`,`gender`,`birthday`,`email`) VALUES('tom','男','2001-01-23','1224@163.com'), ('Lee','女','2002-07-16','3253@163.com'), ('Jack','男','2001-05-28','4352@163.com');
|
5.4 修改
1 2 3 4 5 6
| UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];
UPDATE grade SET gradename = '高中' WHERE gradeid = 1;
UPDATE `student` SET `name`='陈', `email`='chen@163.com' WHERE id = 1;
|
value可以是一个值(常量),也可以是一个变量(比如时间等)。
如果不加上WHERE子句,会默认修改所有行的相应内容。(最好不要这样做)
如果把所有行的内容都修改了,建议 删库跑路~
条件:where子句 运算符
| 操作符 |
含义 |
范围 |
结果 |
| = |
等于 |
|
等于执行sql |
| <>或!= |
不等于 |
|
不等于执行sql |
| > >= < <= |
大于大于等于小于小于等于 |
|
|
| between … and … |
在某个范围内 |
[2,5] |
|
| and |
我和你&& |
|
|
| or |
我或你\ |
\ |
|
|
MySQL完整运算符: https://www.runoob.com/mysql/mysql-operator.html。