初始sysql语句_副本

一、模式设置和修改(宽松模式和严格模式)

为什么设置严格模式:
严格模式后,再向数据库输入数据时,如果超出了规定的约束,会报错,得到提醒;否则,你都不知道错了.

方式一(当前会话生效):先执行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

猜你喜欢

转载自www.cnblogs.com/lgw1171435560/p/10284415.html