表操作
创建表
CREATE TABLE 表名
(
字段名 数据类型 属性 ,
字段名 数据类型 属性
);
表名和字段名不能重复
默认允许空值,并且可以通过DEFAULT设置默认值,默认值必须是常数
例如:
CREATE TABLE pet2
(
name VARCHAR(225) NOT NULL,
owner VARCHAR(225) DEFAULT 'police',
species VARCHAR(225),
sex CHAR(1),
birth DATE,
death DATE
);
设置了默认值,如果在后续插入表内容的时候没有给owner赋值,那么该单元格将会是默认值police
字段约束:
-
主键 PRIMARY KEY
字段名 数据类型 NOT NULL PRIMARY KEY
-
外键 FOREIGN KEY
-
字段名 数据类型 NOT NULL REFERENCES KEY 关联表 (关联列)
该表与其他表关联,一定是其他表的主键
除了在创建表的时候可以用上述方法进行约束,还可以在修改表的时候约束:
-
ALTER TABLE 表名
ADD CONSTRAINT PRIMARY KEY (列名) -
ALTER TABLE 表名
ADD CONSTRAINT FOREIGN KEY (列名)
REFERENCES 关联表 (关联列)
-
UNIQUE 唯一约束:确保行数据的唯一性
字段名 数据类型 UNIQUE ALTER TABLE 表名 ADD CONSTRAINT UNIQUE (列名)
-
CHECK 检查约束:确保行内数据满足指定条件
字段名 数据类型 NOT NULL CHECK (字段(限定条件))
例如 CHECK (sale_price > 0)
ALTER TABLE 表名 ADD CONSTRAINT CHECK (字段(限定条件))
例如CHECK (sex enum(‘M’,‘F’))
-
DEFAULT 默认值
字段名 数据类型 DEFAULT 默认值
索引:
创建索引:
CREATE INDEX 索引名 ON 表名 (列名)
复制表
标准SQL语句:
SELECT
字段 INTO
新表 FROM
目标表;
mysql语句:
CREATE TABLE
表名
AS
任何select语句;
赋值的select后面是选择的列,where后面过滤的是行内容,如果想要赋值一个空表,则可以在where后面添加过滤条件 1 = 2
修改表
增删改表格的列:
ALTER TABLE 表名 ADD 字段名 数据类型 属性;
ALTER TABLE 表名 DROP 字段名1, 字段名2;
ALTER TABLE 表名 DROP COLUMN 字段名;
ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型 属性;
删除表
DROP TABLE 表名;
重命名
RENAME TABLE 表名1 TO 新表名1 , 表名2 TO ...;
虚拟表
视图VIEW,本身不包含数据,源数据发生改变,镜像也发生改变。
创建视图:
CREATE VIEW 视图名 AS 目标二维表 ;
删除视图:
DROP VIEW 视图名 ;
视图名唯一,视图可以嵌套,视图的源数据可以视图。
可以对视图进行所有SELCET 操作
尽量不要对视图进行ORDER BY 操作,有些DBMS不支持。
通过视图可以方便语句重用,实现数据过滤,隐藏复杂语句。
固化SQL语句-存储过程
在DBMS中和直接在语句提示符中语法不一样。
在DBMS中,写法如下:
执行过程(调用函数): CALL PROCEDURE 过程名();
删除过程(删除函数): DROP PROCEDURE 过程名;
输入输出类型: IN / OUT / INOUT
在mysql中直接定义过程语句如下:
事务管理
在进行INSERT UPDATE DELETE
操作时,为了避免操作没有完全执行成功,所以需要批量执行SQL操作,使之完全执行或者完全不执行。
- COMMIT 提交: 将SQL语句的执行结果写入数据库表中
- ROLLBACK 回退 :撤销SQL 语句的执行结果
- SAVEPOINT 保留点: 时间点备份,可以对其发布退回
- RALLBACK TO 回退点
在mysql中,回车之后会自动执行COMMIT,进行存盘,此时使用ROLLBACK 并没有用。
如果要取消自动执行COMMIT,可以使用SET AUTOCOMMIT :
- 0 表示取消自动执行commit
- 1 表示执行自动执行commit
SET AUTOCOMMIT = 0;
SET AUTOCOMMIT = 1;
取消自动执行COMMIT 之后便可以使用ROLLBACK。
开始事务管理,首先使用BEGIN 关键字
BEGIN;
在这之中执行的操作都可以被ROLLBACK回上一步
ROLLBACK;
在其中可以某一步操作之后可以保存一个或多个时间点:
SAVEPOINT save_point1;
之后又可以进行各种操作,如果想要回退到某一个时间点:
ROLLBACK TO save_point1;
确定完成之后,需要使用commit将结果存盘
COMMIT;