创建数据库和创建表
create database test2
create database if not exists test2
drop database test1
CREATE TABLE 表名(
字段名1 数据类型 [约束条件],
字段名2 数据类型 [约束条件],
…
[其他约束条件],
[其他约束条件]
)其他选项(例如存储引擎、字符集等选项)
列名 数据类型 长度
用户编号 int 10
身份证 varchar 20
姓名 varchar 10
年龄 int 3
性别 char 1
身高 DECIMAL 7,2
生日 date
状态 INT 1 默认值 1 (是否是黑名单,0是黑名单 1可用)
create table person(
pid int(10),
identifyid varchar(20),
pname varchar(10),
page int(3),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP
)
select * from person;
drop table person;
-- 约束:数据库的一个对象
-- 约束: Constraint,是定义在表上的一种强制规则。
-- 当为某个表定义约束后,对该表做的所有SQL操作都必须满足约束的规则要求,否则操作将失败。
-- 定义约束: 在创表时给表中的列添加约束或者创完表之后追加约束
-- 约束的分类:
-- 非空约束:非空约束,指定某列的所有行数据不能包含空值
-- 唯一约束:唯一性约束,指定列或者列的组合 的所有行数据必须唯一
-- 主键约束:一个表的主键,一个表只能有一个主键,UNIQUE+not null
-- 外键约束
-- 非空约束:非空约束,指定某列的所有行数据不能包含空值
create table person(
pid int(10) not null,
identifyid varchar(20),
pname varchar(10),
page int(3),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP
)
-- 唯一约束:唯一性约束,指定列或者列的组合 的所有行数据必须唯一
-- ①给某列添加唯一约束后,默认为该列调加索引,优化查询速度:select * from person where pname='xxx'
-- ②可以创建组合约束
-- ③唯一约束的字段可以为空值(NULL),可以有多个null
-- ④每一张数据表可以存在多个唯一约束字段。
create table person(
pid int(10) not null,
identifyid varchar(20),
pname varchar(10) UNIQUE,
page int(3),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP
)
-- 可以创建组合约束
create table person(
pid int(10) not null,
identifyid varchar(20) ,
pname varchar(10) ,
page int(3),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP,
UNIQUE(identifyid,pname)
)
-- 主键约束:一个表的主键,一个表只能有一个主键,UNIQUE+not null
-- 给某列添加唯一约束后,默认为该列调加索引,优化查询速度:select * from person where pname='xxx'
create table person(
pid int(10) PRIMARY key,
identifyid varchar(20) ,
pname varchar(10) ,
page int(3),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP
)
-- AUTO_INCREMENT 字段 默认自增1
-- 注意:只有主键才能使用AUTO_INCREMENT
create table person(
pid int(10) PRIMARY key AUTO_INCREMENT,
identifyid varchar(20) ,
pname varchar(10) ,
page int(3),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP
)
-- 要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
create table person(
pid int(10) PRIMARY key,
identifyid varchar(20) ,
pname varchar(10) ,
page int(3),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP
)
-- 外键约束:表与表之间的关联,一个表的列的数据来自于另一张表
-- ①有外键约束的列的数据一定来至于主表,如果添加或更新的数据不再范围内会出现:未找到父项关键字
-- ②一个表中可以有多个外键
-- ③能作为外键的列一定是主键表中的主键或者唯一键
-- ④有外键关联的主表不能被删除:已找到子类记录
create table person(
pid int(10) PRIMARY key,
identifyid varchar(20) ,
pname varchar(10) ,
page int(3),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP,
deptno int(4),
dname varchar(14),
empno int(4),
FOREIGN key (deptno) REFERENCES dept(deptno),
FOREIGN key (empno) REFERENCES emp(empno)
)
-- check 约束:检查性约束,添加或者更新的值必须在指定的范围内
-- CHECK语句会被忽略,也意味着MySQL被没有实现这个功能
create table person(
pid int(10) PRIMARY key,
identifyid varchar(20) ,
pname varchar(10) ,
page int(3) check(page<100),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP
)
-- check中使用in
create table person(
pid int(10) PRIMARY key,
identifyid varchar(20) ,
pname varchar(10) ,
page int(3),
psex char(1) check(psex in ('男','女')),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP
)
-- 复制表
-- 复制一个表结构的实现方法有两种。
-- 方式一:CREATE TABLE 新表名 LIKE 源表 约束不会被复制
create table emp_bak like emp;
select *from emp_bak;
-- 方式二:CREATE TABLE 新表名 SELECT - FROM 源表
create table emp_bak select * from emp where 1=0;
-- 复制表结构和数据
create table emp_bak select * from emp where 1=1;
create table emp_bak select ename,empno from emp where 1=1;
create table emp_bak select ename,empno from emp where deptno=10;
-- 表的重命名
-- RENAME TABLE 旧表名 TO 新表名
rename table emp_bak to emp_A
-- 该命令等效于:ALTER TABLE 旧表名 RENAME 新表名
-- 追加约束
-------------------
-- alter table table_name add UNIQUE(column_name);
------------------
create table person(
pid int(10),
identifyid varchar(20) ,
pname varchar(10) ,
page int(3),
psex char(1),
pheight decimal(7,2),
pbirthday date,
pstatus int(1) default 1,
time1 DATETIME,
time2 TIMESTAMP,
deptno int(4)
)
-- 追加唯一约束
alter table person add UNIQUE(pname);
-- 追加主键约束
alter table person add PRIMARY KEY (pid);
-- 追加外键约束
alter table person add FOREIGN KEY(deptno) REFERENCES dept(deptno);
----------------------
-- 修改表
-- alter table 表名 modify column 列名 数据类型 DEFAULT 默认值;
------------------------
-- 追加非空约束 :注意数据类型必须有
alter table person modify column psex int(3) not null;
-- 删除约束
-- alter table table_name drop PRIMARY KEY;
------------------------------------------
alter table person drop index pname;
-- 删除外键
alter table person drop foreign key person_dept_fk;
-- 删除非空约束
alter table person modify column psex int(3);
show create table person;
drop table person;