下面是如何创建表和对表进行操作
DDL
-
易错:
表明和字段名可以加转义符(esc下面的````)
列的创建语句后要加 逗号(英文,)
右括号)前的最后一行不能加逗号(英文,)
engine = INNODB charset = utf8 或者engine = INNODB ,charset = utf8 -
添加 auto_increment :自增加(字符类型不能自增加)
-
添加 主键 :
customerID
int(11) not null auto_increment COMMENT ‘客户编号’,
primary key(customerID
)
或者customerID
int(11) not null auto_increment COMMENT ‘客户编号’ primary key,
create table if not EXISTS `userInfo`(
`customerID` int(11) not null auto_increment COMMENT '客户编号',
`customerName` char(10) not null ,
`PID` char(255) not null,
`telephone` char(64) not null,
`address` varchar(64) ,
primary key(`customerID`)
)engine = INNODB charset = utf8;
- 添加 default:默认
int类型 : default 0000000
char类型 : default ‘888888’ (加单引号)
默认null : defaul null
默认为系统当前日期:default CURRENT_TIMESTAMP - 类型
DECIMAL(5,2):小数类型 5表示最长16位(包括小数),2表示可以有两位小数
TEXT:存放最大长度为 65,535 个字符的字符串。
create table if not exists cardInfo(
cardID CHAR(64) not null default 0000000 COMMENT '卡号' ,
curID VARCHAR(64) not null COMMENT '货币种类' ,
savingID VARCHAR(64) not null COMMENT '存款类型',
openDate TIMESTAMP not null COMMENT '开户日期',
openMoney DECIMAL(5,2) not null COMMENT '开户余额',
balance DECIMAL(5,2) not null COMMENT '余额',
`password` VARCHAR(64) not null default '888888' COMMENT '密码',
IsReportLoss bit(10) not null DEFAULT '否' COMMENT '是否挂失',
customerID INT(64) not null COMMENT '客户编号',
primary key(cardID)
)engine = innodb, charset = utf8;
DML
- 添加主外键关系
ALTER TABLE 外键表表名 ADD FOREIGN KEY(外键表外键列) REFERENCES 主表(主键列);
- 只有主键表的主键列和其他表的非主键列才可以添加主键列关系(两个表的主键列之间 X)。其中主键表的主键关系必须先添加上,否则无法添加主外键关系
- 主键表和主键列的类型和长度必须完全一样
- 添加之前,外键列和主键列必须有数据 且数据满足主外键的关系
ALTER TABLE student ADD PRIMARY KEY(s);-- 添加主键
alter table sc add FOREIGN KEY(s) REFERENCES student(S); -- 添加主外键关系
-- 创建数据库 CREATE DATABASE 数据库名
create database firstDB;
-- 删除数据库 DROP DATABASE 数据库名称
-- 查看数据库
show databases;
-- CREATE TABLE [ IF NOT EXISTS ] `表名` (
--
-- `字段名1` 列类型 [ 属性 ] [ 索引 ] [注释] ,
-- `字段名2` 列类型 [ 属性 ] [ 索引 ] [注释] ,
-- … …
-- `字段名n` 列类型 [ 属性 ] [ 索引 ] [注释]
--
-- ) [ 表类型 ] [ 表字符集 ] [注释] ;
-- 切换需要操作的数据
USE firstDB;
CREATE TABLE IF NOT EXISTS student( -- -- 不需要加单引号 如果表名有特殊含义 加esc下的单引号`subject`
studentNo INT(11) NOT NULL AUTO_INCREMENT, -- PRIMARY KEY
studentName VARCHAR(50) NOT NULL COMMENT '科目名称',
gradeID int(4) not null,
PRIMARY KEY(studentNo)
)ENGINE = INNODB charset=utf8;
-- 查看表设计
desc student;
-- 删除表 drop table 表名
drop table newstudent --**为什么不能同时运行 12-15
-- 创建一张表 中需要有 原有Student表中的数据
create table newstudent
AS
select studentNo,studentName,gradeID from student where studentName like '张%' -- studentName like '张%' --注意 是英文的百分号
-- 查询语句 SELECT (*:所有列)列名1,列名2,....... FROM 表名 WHERE 列名 = 值 and or等关键字 ......
SELECT * FROM student
-- 创建一张表 需要有 原有Student表中的结构 不要数据
CREATE TABLE newstudent
AS
SELECT * FROM student WHERE 1=2 -- *代表所有数据
-- 查看表设计
desc newstudent;
-- 查看 创建的表
show create table newstudent
-- 查看所有表
SHOW TABLES ;
-- 删除一个 存在的表
DROP TABLE IF EXISTS newstudent;
-- 更改表名 ALTER TABLE 原表名称 RENAME 更新后的表名 表名忽略了大小写
ALTER TABLE newstudent RENAME newstudent_RENAME;
-- 更改表名 RENAME TABLE 原表名称 TO 更新后的表名;
RENAME TABLE newstudent_RENAME TO newstudent;
-- 添加列
alter table newstudent add sex varchar(2) not null;
-- 删除列
alter table newstudent drop sex
-- 更改 列名和属性
alter table newstudent change studentName age char(4)
-- 更改 属性
alter table newstudent MODIFY age varchar(4)
-- 删除主键
ALTER TABLE newstudent DROP PRIMARY KEY;
-- 两种添加主键的方法
-- 添加主键 ALTER TABLE 表名 ADD PRIMARY KEY(列名);
ALTER TABLE newstudent ADD PRIMARY KEY(gradeID); -- 两种添加主键的方法
-- 添加主键 ALTER TABLE 表名 ADD CONSTRAINT 主键约束名称 PRIMARY KEY(列名);
ALTER TABLE newstudent ADD CONSTRAINT pk_gradeID PRIMARY KEY(gradeID);
-- 添加主外键 关系
-- ALTER TABLE 外键表表名 ADD FOREIGN KEY(外键表外键列) REFERENCES 主表(主键列);
ALTER TABLE student ADD FOREIGN KEY(gradeId) REFERENCES newstudent(gradeId); -- 外键列和主键列的属性要一致(包括类型和长度)。 创建主外键关系前要保证当前外键列的内容符合主键列的约束
-- 删除主外键 关系
-- ALTER TABLE 外键表表名 DROP FOREIGN KEY `外键约束的约束名称`;
ALTER TABLE student DROP FOREIGN KEY `student_ibfk_1`; -- 外键约束的约束名称 获取名称:手动更新一个限制之外的值会有提示
-- 添加列
ALTER TABLE student ADD phone int(10) not null;
-- 添加 唯一键
ALTER TABLE student ADD UNIQUE (phone); -- 添加唯一键之前 确保所在属性内容是唯一不重复
ALTER TABLE student ADD UNIQUE u_phone (phone); -- **这是啥意思
DROP INDEX `u_phone` ON student
drop table student unique
一些概念
- 数据库
-
结构化查询语句SQL
-
命令行操作数据库
-
创建数据表
ps1: 反引号(可选、区别于单引号)用于区别MySQL保留字与普通字符而引入的
ps2:字段属性
NULL 和 NOT NULL:默认为NULL,即没有插入该列的数值.如果设置为NOT NULL,则该列必须有值。NULL值理解为“没有值”或“未知值”,不要用NULL进行算术运算,结果仍为NULL
DEFAULT默认的用于设置默认值:DEFAULT null 或者default (指定数据类型的内容) -
列类型分类
数值类型
字符串类型
日期和时间型数值类型
-
主键/标识列:不允许内容重复
ps; AUTO_INCREMENT(自动增长的,每添加一条数据,自动在上一个记录数上加1.通常用于设置主键,且为整数类型) -
主外键约束:外键列的内容受到主键列内容的约束(首先主键列本身就是内容不重复的)
-
唯一键:不能出现重复内容
-
主键和唯一键的区别:unique 作用的字段允许为空
ps1: 为什么向unique 修饰的连续插入两个为空的数据会失败?因为unique 需要保证唯一性,属性内容中如果插入两个null 就不唯一了
ps2: 组合的意思是