操作数据表
MySQL登录
net start mysql80 or net stop mysql80
mysql -uroot -p
password:1177
prompt 提示符
\D 当前日期
\d 当前数据库
\h 当前主机
\u 用户名
mysql -uroot -p --prompt \u@\h(\d)> prompt \u@\h(\d)>
MySQL常用命令
- SELECT VERSION() 显示版本
- SELECT NOW(); 显示日期
- SELECT USER(); 显示用户
- SELECT DATABASES(); 显示数据库
创建数据库test
CREATE DATABASE [IF NOT EXISTS]test [CHARACTER SET utf-8];
SHOW WARNINGS; //查看warning
SHOW CREATE DATABASE test //展示创建的数据库信息
修改数据库编码
ALTER DATABASE test CHARACTER SET = utf-8
删除数据库
DROP DATABASE [IF EXISTS] test;
创建数据表及基本操作
CREATE TABLE test1( username VARCHAR(20) NOT NULL, //字段可以为空 age TINYINT UNSIGNED NULL, //非空 salary FLOAT(8,2) UNSIGNED );
查看数据表列表
SHOW TABLES [FROM test]
查看数据表结构
SHOW COLUMNS FROM test;
插入记录
//若省略[]中内容,则所有字段都要赋值 INSERT test [username,age] VALUES('Cui',24);
查找记录
SELECT * FROM test;
AUTO_INCREMENT 自动编号
自动编号,必须与主键组合使用,但主键不必定需要AUTO_INCREMENT
默认情况下,起始值为1,每次的增量为1
不需要赋值
//必须设为主键 PRIMARY KEY CREATE TABLE test( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, );
PRIMARY KEY 主键
主键约束
每张数据表只能存在一个主键
主键保证记录的唯一性
主键自动为NOT NULL
CREATE TABLE test( id SMALL UNSIGNED PRIMARY KEY, );
UNIQUE KEY 唯一约束
唯一约束
唯一约束可以保证记录的唯一性
唯一约束的字段可以为空值(NULL)
每张数据表可以存在多个唯一约束 (与主键的区别)
CREATE TABLE test( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE KEY, age TINYINT(3) UNSIGNED );
DEFAULT 默认约束
默认值
当插入记录时,如果没有明确为字段赋值,自动赋默认值
//sex字段没有赋值时,默认为3 CREATE TABLE test( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE KEY, sex ENUM('1','2','3') DEFAULT '3' );
约束及修改数据表
约束
约束保证数据的一致性和完整性
约束分为表级约束和列级约束:对两个及以上字段使用为表级约束,对一个为列级约束
约束类型包括:NOT NULL(非空约束)、PRIMARY KEY (主键约束)、UNIQUE KEY(唯一约束)、DEFAULT (默认约束)、FOREIGN KEY(外键约束)
外键约束
保持数据的一致性、完整性 因此称为
实现一对一或一对多关系 关系型数据库
外键约束的要求:
父表和子表必须使用相同的存储引擎,且只能为InnoDB,禁止使用临时表
外键列和参照列必须具有相似的数据类型。数字的长度或有无符号位必须相同,字符长度可不同
外键列和参数列必须创建索引,如果外键列不存在索引,MySQL将自动创建索引。
创建一个省份数据表:
CREATE TABLE provinces( id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, //参照列 pname VARCHAR(20) NOT NULL ); //查看存储引擎是否为InnoDB SHOW CREATE TABLE provinces;
创建一个用户数据表,存储用户所在省份:
CREATE TABLE user( id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, //参照列 username VARCHAR(10) NOT NULL, pid SMALLINT UNSIGNED, //外键列 // FOREIGN KEY (pid) REFERENCES provinces (id) );
显示索引: SHOW INDEXES FROM provinces\G; \G:以网格的形式呈现
外键约束的参照操作
CASCADE:从附表删除或更新时自动删除或更新子表中匹配的行
SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。使用该选项,必须保证子表列没有指定为NOT NULL。
RESTRICT:拒绝对父表的删除或更新操作。
NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。
修改数据表
添加单列
//FIRST|AFTER 控制添加列的位置 ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]
ALTER TABLE user ADD password VARCHAR(32) NOT NULL DEFAULT AFTER username; /插入在 username 列后
添加多列
ALTER TALBE tbl_name ADD [COLUMN]( col_name column_definition, ... )
删除列
ALTER TABLE tbl_name DROP [COLUMN] col_name
删除多列且添加一列
ALTER TABLE tbl_name DROP col_name,DROP col_name,ADD col_name col_definition;
添加约束
添加主键约束
//CONSTRAINT 给主键添加名字 ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] PRIMARY KEY [index_type] (index_col_name,...)
eg: ALTER TABLE user ADD CONSTRAINT user_id PRIMARY KEY (id);
添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] UNIQUE [INEX|KEY] [index_name] [index_type] (index_col_name,...)
eg: ALTER TABLE user ADD UNIQUE (username);
添加外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] FOREIGN KEY [index_type] (index_col_name,...) reference_definition
eg: ALTER TABLE user ADD FOREIGN KEY (pid) REFERENCE provinces (id);
添加/删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal|DROP DEFAULT}
eg: ALTER TABLE user ADD age TINYINT UNSIGNED NOT NULL;
ALTER TALBE user ALTER age SET DEFAULT 15;//添加默认约束
ALTER TABLE user ALTER age DROP DEFAULT;//删除默认约束
删除约束
删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY
删除唯一约束
//一张表可以有多个唯一约束,因此删除需要唯一约束名字 ALTER TABLE tbl_name DROP {index|key} index_name
eg: ALTER TABLE user DROP INDEX username;
删除外键约束
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
eg: SHOW CREATE TABLE user;//查看外键约束的名字user_ibfk_1
ALTER TABLE user
FOREIGN KEY user_ibfk_1;删除索引
eg:删除索引pid
ALTER TABLE user DROP INDEX pid;
修改列定义
ALTER TABLE tbl_name MODIFY [COLUMN] col_name col_definition [FIRST|AFTER col_name]
eg: ALTER TABLE user MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;//修改id字段为首列
类型同样可以修改,若由大类型改为小类型,可能会造成数据丢失
- 修改列名称
eg: ALTER TABLE user CHANGE pid p_id TINYINT UNSIGNED NOT NULL;
//修改列名称pid为p_id
修改数据表名称
- 方法1:ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
- 方法2:RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2]…