1、创建表格
方法一:自建
创建表格语法如下:
CREATE TABLE 表名(字段1,字段2,....);
字段语法规则:'字段名'+字段类型+约束条件
-- '字段名'+字段类型+约束条件
-- 如:
CREATE TABLE namelist
(
id int primary key ,-- 设置id为整型和主键
name varchar(20) not null,-- 可变字符串最大20字节,非空
sex char(1) default '女',-- 固定1字节,默认值为‘女’
);
推荐把表级约束(如主键的设置)放到最后写,增加可读性:
CREATE TABLE namelist
(
id int ,
name varchar(20) not null default '张三',
sex char(1),
primary key(id,name)-- 主键设置放到了最后
);
常见创建表时加上if not exists: 表示检测要创建的表是否已存在,如果不存在就继续创建
CREATE TABLE IF NOT EXISTS namelist(age varchar(20));
数据库的数据类型和字段属性:
字段类型 | 字段含义 | 字段属性 | |
数 值 | tinyint | 十分小的数据 | 1个字节 |
smallint | 较小的数据 | 2个字节 | |
mediumint | 中等大小的数据类型 | 3个字节 | |
int | 标准的整数 | 4个字节 | |
big | 较大的数据 | 8个字节 | |
float | 浮点数 | 4个字节 | |
double | 浮点数 | 8个字节 | |
decimal | 字符串形式的浮点数(常用于金融计算) | 8个字节 | |
字 符 串 | char | 固定大小的字符串 | 0~255 |
varchar | 可变字符串 | 0~65535 | |
tinytext | 微型文本 | 2^16-1 | |
text | 文本串(保存长文本) | 2^16-1 | |
时 间 日 期 | date | 日期格式 | 2023-2-6 |
time | 时间格式 | 21:40:23 | |
datetime | 常用的时间格式 | 2023-2-6 21:40:23 | |
timestamp | 时间戳 | 1970.1.1至今的毫秒数 | |
year | 年份 | 2023 | |
Null | 没有值,null参与的运算结果也为null |
约束条件的种类
分类 | 约束 | 含义 | |
列 级 约 束 | not null | 非空,用于保证该字段的值不能为空;如姓名、学号等 | |
default | 默认,用于保证该字段有默认值;比如性别 | ||
zerofill | 表示若数值不满设置位数,则前面用"0"填充,例0001 | ||
auto_increment | 表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增 | ||
表 级 约 束 | primary key | 主键,用于保证该字段的值具有唯一性,并且非空;比如学号、员工编号等 | |
unique | 唯一,用于保证该字段的值具有唯一性,可以为空;比如座位号 | ||
check | 检查约束【mysql中不支持】;比如年龄、性别 | ||
foreign key | 外键,用于限制两个表的关系;比如学生表的专业编号等 |
方法二:复制
只复制索引和表的结构
CREATE TABLE 新表 LIKE 旧表;
只复制数据,相当于将查询结果导出成一个表
CREATE TABLE 新表 SELECT * FROM 旧表;
完整复制:先复制表结构,再向新表插入数据,可以有选择的插入
CREATE TABLE 新表 LIKE 旧表;
INSERT INTO 新表 SELECT * FROM 旧表;
2、增删改列
对于已经创建好的表格,增加新列使用ALTER-ADD语句:
ALTER TABLE 表名 ADD(字段1,字段2,....);
-- 如alter table student add(sex char(1),age tinyint);#添加信息目录
删除列使用ALTER-DROP语句:
ALTER TABLE 表名 DROP column 字段名;
对于已经创建好的列,整列重新修订(重写列)使用ALTER-CHANGE语句,此语句必须带有新字段名称、字段类型:
ALTER TABLE 表名 CHANGE 旧列名 字段名称 字段类型 [完整性约束条件];
-- 如alter table student change id s_id int;#修改信息
同时修改数据类型、非表级的列级约束使用ALTER-MODIFY语句
ALTER TABLE 表名 MODIFY COLUMN 列名 数据类型;
-- 如alter table qq modify xb char(1) default 'c';
只修改列名使用ALTER-RENAME COLUMN语句
ALTER TABLE 表名 RENAME COLUMN 旧列名 TO 新列名;
只修改主键使用ALTER-ADD/DROP
ALTER TABLE 表名 ADD primary key(字段); -- 修改某列为主键
ALTER TABLE 表名 DROP primary key(字段); -- 删除表主键
只修改唯一约束
ALTER TABLE 表名 ADD unique key(字段); -- 添加唯一约束
ALTER TABLE 表名 DROP index 约束索引; -- 删除唯一约束
-- 约束索引使用“show index from 表名“查看
只修改默认值可以使用ALTER-ALTER语句:
ALTER TABLE 表名 ALTER COLUMN 字段名 DROP default; -- (若本身存在默认值,则先删除)
ALTER TABLE 表名 ALTER COLUMN 字段名 SET default 默认值;-- (若本身不存在则可以直接设定)
-- 注:以上语句中除重命名外,COLUMN在MySQL中可以省略
3、为表起别名
表名 AS 别名;
-- 表名:数据中存储的数据表的名称。
-- 别名:查询时指定的表的新名称,不能与数据库中的其他表的名称冲突。
-- AS:关键字为可选参数。
-- 例:SELECT stu.name,stu.height FROM tb_students_info AS stu;
在为列起别名时也遵循相同规则
4、删除表
方法一:drop
DROP TABLE 表名;
直接删除表所有信息,无法找回数据
方法二:truncate
TRUNCATE TABLE 表名;
删除表数据,不删除表的结构,删除后将重建索引(新插入数据后id从0开始记起)。
drop、truncate都是DDL语句(数据定义语言),执行后会自动提交,不记录MySQL日志,不能回滚。
方法三:delete
DELETE FROM 表名 WHERE 条件;
删除表中的数据,不删除表结构,可以与where连用,可以删除指定的行。
delete语句是数据库操作语言(DML),delete不会删除索引 (新插入的数据将在删除数据的索引后继续增加),会记录MySQL日志,能回滚。