mysql-2-DML、DDL

时间:2021-02-01 11:52:19   收藏:0   阅读:0

DML语法

插入:

方式1:
insert into 表名(列名1,......) 
values(值1,......)

方式2:
insert  into 表名(列名1,......) 
values(值1,......),
values(值1,......),
......

方式3:
insert  into 表名()(
	select ....;
)

方式4:
insert into 表名 
set 列名=值,
......

更新:

update 表名
set 列名=值,......
[where 筛选条件] 

sql92语法:

update 表1 别名,表2 别名
set 列=值,..: ..
where 连接条件 and 筛选条件;

sql99语法:

update 表1 别名
[inner/left/right] join 表2 别名 on 连接条件
set 列=值,......
where 筛选条件;

删除

delete from 表名
[where 筛选条件]

不加筛选条件即删除整表
多表删除 和更新类似
删除全表:truncate table 表名

truncate和delete对比:

DDL语法

关键字 说明
create 创建
rename 重命名
alter 修改
drop 删除
if/if not exists 判断存在

数据库操作

选择数据库:
use 数据库名;

创建数据库:
create datebase 库名
create datebase if not exists 库名   先判断数据库是否存在

修改库:
rename database 旧库名 to 新库名      5.1.7存在,已废弃

更改库字符集:
alter database 库名  character set 字符集

删除库:
drop database if exists 库名

表操作

创建表:
create table 表名(
	列名 类型 [约束] [约束] ...,
	....,
)

修改表名:
alter table 旧表名 rename to 新表名

删除表:
drop table 表名

表复制:
# 仅仅复制表结构
create table 表名 like 被复制的表名; 
# 复制表结构和数据,加where可限定复制部分数据
create table 表名 select * from 被复制的表名;   
# 复制表的某些字段
create table 表名 select 字段1,... from 被复制的表名 where 0;

格式:alter table 表名 add|drop|modify|change column 列名 【列类型 约束】;

修改列名:
alter table 表名 change column 旧列名 新列名 [类型]

修改列的类型或约束:
alter table 表名 modify column 列名 新类型

添加新列:
alter table 表名 add column 列名 类型

删除列:
alter table 表名 drop column 列名	

常见数据类型

数值型:

创建表时定义字段类型说明:

整型:Tinyint、Smallint、editmint、Int/Integer、Bigint

小数:

浮点数: Float(M,D)、Double(M,D)

定点数: DEC(M,D)/DECIMAL(M,D)

选择类型原则:所选择的类型越简单越好,能保存数值类型越小越好

字符型:

短文本:Char(M)、Varchar(M)

长文本:Text(文本)、Blob(较大的二进制)

其他:Binary、Varbinary、Enum、Set

日期型:

日期:Date、Datetime、Timestamp(时间戳)、Time、Year

更换时区:
set time_zone = 时区

常见约束

关键字 约束名 说明
NOT NULL 非空 保证该字段不能为null。如:姓名、学号
DEFAULT 默认值 如果插入没规定其他值,会添默认值。如:性别
UNIQUE 唯一 保证值唯一性,可为空。如:座位号
PRIMARY KEY 主键 本表主要的列可做主键
FOREIGN KEY 外键 关联其他表格,限制两表关系,本表字段值必须是其他表字段值(一般是其他表的主键列)
CHECK 检查 自定义检查约束限制条件(mysql不支持)。

添加约束时机:

列级约束:

表级约束:

例如:创建表添加约束

# 添加列级约束
CREATE TABLE stuinfo (
    id INT PRIMARYKEY, # 主键 主键默认必须非空,唯一
    stuName VARCHAR(20) NoT NULI, # 非空
    gender CHAR(1)  CHECK(gender=‘男‘ OR gender =‘女‘),# 检查
    seat INT UNIQUE, # 唯一
    age INT DEFAULT 18, # 默认约束
    majorid INT FOREIGN KEY REFERENCEs major(id) # 外键 引入major表的id字段
)

# 添加表级约束   格式:字段下面添加  [constraint约束名] 约束类型(字段名)
CREATE TABLE stuinfo (
    id INT,
    stuname VARCHAR(20),
    gender CHAR(1),
    seat INT,
    age INT,
    majorid INT,
    
    CONSTRAINT pk PRIMARY KEY(id),# 主键
    CONSTRAINT uq UNIQUE(seat), # 唯一键
    CONSTRAINT ck CHECK(gender=‘男‘OR gender=‘女‘),# 检查
    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES  major(id) # 外键
);

列级约束和表级约束有什么区别?

什么时候用列级,什么时候用表级?通用写法:

外键:

修改表时删除约束

# 1.期制除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
# 2.删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT ;
# 3.册除主键
AITER TABLE stuinfo DROP PRIMARY KEY;
# 4.册除唯一
AITERT ABLE stuinfo DROP INDEX seat;
# 5.删除外键
AITER TABLE stuinfo DROP FOREIGN KEY 外键名

标识列

标识列又称自增长列。

可以不用手动插入值,系统提供默认的序列值。

# 建表时设置标识列
CREATE TABLE tab_identity(
	id INT PRIMARY KEY AUTO_INCREMENT, # AUTO_INCREMENT标识自增长
    name VARCHAR(20)
);

# 查看系统自增量,每次增加步长的值
SHOW VARIABLES LIKE ‘%auto_inerement%‘;

标识列必须和主键搭配吗?

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!