一、模式设置和修改(宽松模式和严格模式)
为什么设置严格模式:
严格模式后,再向数据库输入数据时,如果超出了规定的约束,会报错,得到提醒;否则,你都不知道错了.
方式一(当前会话生效):先执行select @@sql_mode,而后set session sql_mode='STRICT_TRANS_TABLES';改为严格模式
此方法只在当前会话中生效,关闭当前会话就不生效了。
方式二(全局生效):先执行select @@global.sql_mode;然后执行set global sql_mode = ''STRICT_TRANS_TABLES''。
此方法在当前服务中生效,重新MySQL服务后失效
方法三(永久生效):在mysql的安装目录下,my.ini文件),新增
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
然后重启mysql。
方法三方法永久生效.当然生产环境上是禁止重启MySQL服务的,所以采用方式二加方式三来解决线上的问题,
查看是什么模式: 1.select @@global.sql_mode; #查看全局的 2.select @@sql_mode;
二、有关表的操作
#语法: create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); #注意: 1. 在同一张表中,字段名是不能相同 2. 宽度和约束条件可选、非必须,宽度指的就是字段长度约束,例如:char(10)里面的10 3. 字段名和类型是必须的
表的完整性约束:
约束条件分类: primary key (pk) 标识该字段为该表的主键,可以唯一的标识记录.可以加快查找速度,一般和自动增长一起用 foreign KEY (fk) 标识该字段为该表的外键 not null 标识该字段不能为空 unique key (uk) 标识该字段的值是唯一的 auto_increment 标识该字段的值自动增长(整数类型,而且为主键) default x 为该字段设置默认值 UNSIGNED 无符号 ZEROFILL 使用0填充
查看表结构:
describe t1; #查看表结构,可简写为:desc 表名 show create table t1\G; #查看表详细结构,可加\G
关于表的增删改查语法:
语法: 1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], #注意这里可以通过逗号来分割,一下添加多个约束条件 ADD 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; #添加这个字段的时候,把它放到第一个字段位置去。 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;#after是放到后的这个字段的后面去了,我们通过一个first和一个after就可以将新添加的字段放到表的任意字段位置了 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; #change比modify还多了个改名字的功能,这一句是只改了一个字段名 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];#这一句除了改了字段名,还改了数据类型、完整性约束等等的内容
代码示范:
添加字段 mysql> alter table student10 -> add name varchar(20) not null, -> add age int(3) not null default 22; mysql> alter table student10 -> add stu_num varchar(10) not null after name; //添加name字段之后 mysql> alter table student10 -> add sex enum('male','female') default 'male' first; //添加到最前面 删除字段 mysql> alter table student10 -> drop sex; 修改字段类型modify mysql> alter table student10 -> modify id int(11) not null primary key auto_increment; //修改为主键 增加约束(针对已有的主键增加auto_increment) mysql> alter table student10 modify id int(11) not null auto_increment; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 对已经存在的表增加复合主键 mysql> alter table service2 -> add primary key(host_ip,port); 增加主键 mysql> alter table student1 -> modify name varchar(10) not null primary key; 删除主键 a. 删除自增约束 mysql> alter table student10 modify id int(11) not null; b. 删除主键 mysql> alter table student10 -> drop primary key;
三.关于表数据的操作:
delete不是用来清空表的,是用来删除一些你想删除的符合某些条件的数据,一般用在delete from tb1 where id>20;如果要清空表,让id置零,使用truncate emp; 如何关联表: create table emp( id int primary key aut_increment, foreign key (dep_id) references dep(id)); 查看表数据: desc dep; delete不是用来清空表的,是用来删除一些你想删除的符合某些条件的数据,一般用在delete from tb1 where id>20;这样的,如果要清空表,让id置零,使用truncate
四,关联表相关:
关联表创建思路:
1.先删除关联表,再删除被关联表,然后我们重新建立两个表 2.重建表
补充 同步更新和同步删除: 在建立关联关系的时候,在关联表里加上这两句:
on delete cascade和 on update cascade(一个在做某个表(被关联表)更新或者删除操作的时候,关联表的数据同步的进行更新和删除的效果)
举例:
create table emp( id int primary key auto_increment, name char(16), foreign key (dep_id) references dep(id) on update cascade on delete cascade
名词:
constraint用来指定外键key的名称
解除外键关系
alter table e3 drop foreign key e3_ibfk_1