mysql常用基础知识
mysql目录
- bin 目录,存储可执行文件
- data 目录,存储数据文件
- docs 文档
- include目录,存储包含的头文件
- lib 存储库文件
- share 错误消息和字符集文件
修改编码方式
//客户端
[mysql]
default-character-set=utf8
//服务端
[mysqld]
character-set-server=utf8
启动关闭mysql服务
systemctl start mysqld
systemctl stop mysqld
登录
mysql -uroot -p -P3306 -h
//输入密码 回车即可
-D ,--database=name 打开制定的数据库
--delimiter=name 制定分隔符
-h, --host=name 服务器名称
-p, --password=name 密码
-P, --port=#端口号
--prompt=name 设置提示符
-u, --user=name 用户名
-V ,--version 输出版本信息并退出
退出
exit;
quit;
\q;
修改mysql提示符
// 一种
mysql -uroot -proot --prompt 提示符
//二种
prompt 提示符
提示符参数
\D 完整的日期
\d 当前的数据库
\h 服务器名称
\u 当前用户
//实例 结果 root@localhost
prompt \u@\h
常用命令
//显示当前服务器版本
SELECT VERSION();
//显示当前的日期时间
SELECT NOW();
//显示当前的用户
SELECT USER();
语句规范
1.关键字与函数名称全部大写
2.数据库名称,表名称,字段名称全部小写
3.sql语句必须以分号结尾
创建数据库操作
// {}是必选项 ,| 是从其中选择一样 ,[]是可选择的 ,expr表达式
//创建数据库
CREATE {DATABASE | SECHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
//查看当前服务器下的数据列表
SHOW {DATABASE | SCHEMAS} [LIKE 'pattern' | WHERE expr]
//查看警告信息
SHOW WARNINGS;
//查看数据库信息
SHOW CREATE DATABASE db_name;
修改数据库操作
ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name
删除数据库操作
DROP {DATABASE | SECHEMA} [IF EXISTS] db_name
数据类型:是指列,存储过程参数,表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不通的信息类型
整数型
浮点型
日期时间型
字符型
打开数据库
USE db_name;
//显示当前打开的数据库
SELECT DATABASE();
创建数据表
CREATE TABLE [IF NOT EXISTS] table_name(column_name data_type,...);
//示例
CRAEATE TABLE IF NOT EXISTS tbl(
username VARCHAR(20),
age TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED
);
查看数据列表
// 不仅可以查看当前数据库表,还可以查看数据库表
SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]
查看表结构
SHOW COLUMNS FROM tbl_name;
插入数据
//省略列名称,所有的字段需要赋值
INSERT [INTO] tbl_name [(col_name,...)] VALUES(val,..)
查看记录
SELECT expr,... FROM tbl_name;
MSYQL空值与非空
NULL,字段值可以为空
NOT NULL,字段值禁止为空
//示例
CREATE TABLE tbl2(
username VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED NULL
);
自动编号
//主键约束,每张数据表只能存在一个主键,主键保证记录的唯一性,主键自动为 NOT NULL
PRIMARY KEY
// AUTO_INCREMENT必须与主键组合使用,
//但PRIMARY KEY 不一定必须与AUTO_INCREMENT组合使用,
//默认起始值为 1,增量为 1
CREATE TABLE tb3(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL
);
唯一约束: UNIQUE KEY ;唯一约束可以 保证记录的唯一性;唯一约束的字段可以为空值(null),每张数据表可以存在多个唯一约束;
又可以为空,有保证唯一性,实际在多个空值的情况下,实际只保存了一个null值
CREATE TABLE tb4(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY,
age TINYINT UNSIGNED
)
默认约束
// 默认值,当插入记录时,如果没有明确为字段赋值,则自动赋予默认值
DEFAULT
CREATE TABLE tb4(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY,
age TINYINT UNSIGNED,
sex ENUM('1','2','3') DEFAULT '3'
);
约束
//约束保证数据的完整性和一致性
//约束分为表级约束(两个字段以上)和列级约束(单个字段)
//约束类型包括
a.NOT NULL(非空约束)
b.PRIMARY (KEY主键约束)
c.DEFAULT(默认约束)
d.FOREIGN KEY(外键约束)
外键约束
- 父表和字表必须使用相同的存储引擎,而且禁止使用临时表。
- 数据表的存储引擎只能为 Innodb
- 外键列和参照列必须具有相似的数据类型,其中数字的长度或是符号位必须相同,而字符长度可以不同
- 外键列和参照列必须创建索引,如果外检列不存在索引的话,mysql将自动创建索引.
编辑mysql表的默认存储引擎
// msyql配置文件
default-storage-engine=INNODB
//示例
CREATE TABLE users(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username varchar(20) NOT NULL,
pid SMALLINT UNSINGNED,
FOREIGN (pid) REFERENCES provice(id)
);
查看索引
SHOW INDEXES FROM users;
外键约束的参照操作:在更新表的时候子表是否也进行相应的操作
- CASCADE :从父表删除或更新且自动删除或更新字表中匹配的行(例:删除省份表,则用户关联该省的信息都会删除)
- SET NULL :从父表删除或更新行,并设置字表中的外键列为NULL.如果使用改选项,必须保证子表列没有指定NOT NULL
- RESTRICT :拒绝对父表的山川或更新操作
NO ACTION :标准sql的关键字,在mysq中与restrict相同
//示例
REATE TABLE users(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username varchar(20) NOT NULL,
pid SMALLINT UNSINGNED,
FOREIGN (pid) REFERENCES provice(id) ON DELETE CASCADE
;
现在使用较少外键约束,一般使用逻辑的外键约束。
表级约束与列级约束
- 对一个数据列建立的约束,称为列级约束
- 对多个数据列建立的约束,称为表级约束
- 列级约束即可以在定义列是声明,也可以在列定义后声明;表级约束只能在列定义后声明。
列级的约束使用较多,表级的约束较少
修改数据表
//添加单列
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name];
//示例
ALTER TABLE users ADD age TINYINT UNSIGNED NOT NUL DEFAULT 10;
//添加多列
ALTER TABLE 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,...
修改列定义
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
修改列名称
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST | AFTER col_name]
修改数据表名字
//法一
ALTER TABLE tbl_name RENAME [TO | AS] new_tbl_name
//法二
RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2] ...
添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [index_name] [index_type] (index_col_name,...)
添加外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition ;
添加/删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name { SET DEFAULT default_value | DROP DEFAULT}
删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY
删除唯一约束
ALTER TABLE tbl_name DROP {INDEX | KEY } index_name
删除外检约束
ALTER TABLE tbl_name DROP FOREIGN KEY foreigin_key_name