1.mysql内置的功能
1.连接数据库
-u (以什么身份登录)
-P (以哪个端口登录)
-S (以哪个路径启动)
-h (连接什么地址)
-p (密码)
-e (不交互,不进入数据库执行命令)
< (回复数据)
例子:
(1)mysql -uroot -p -S /tmp/mysql.sock
(2)mysql -uroot -p -h10.0.0.51 -P3306
(3)mysql -uroot -p -e "show databases;"
(4)mysql -uroot -p123 < /root/world.sql (world.sql 为数据,平时恢复数据的时候经常会用到)
2.内置命令
help 打印mysql帮助
\c=ctrl+c
\q quit; exit; ctrl+d 退出mysql
\G 格式化显示(原来是横着显示,在结尾处+\G就会竖着显示) 例如:mysql> select * from.user\G
source 恢复备份 (和<号命令一样)
3.SQL基础应用
(1)SQL介绍
结构化的查询语言
关系型数据库通用语言的命令
遵循SQL92的标准(SQL_MODE)
(2)SQL常用种类
DDL 数据定义语言
DCL 数据控制语言
DML 数据操作语言 (data manage language)都是缩写
DQL 数据查询语言
4.SQL引入-数据库的逻辑结构
库
库名字:
库属性:字符集,排序规则
表
表名字:
表属性:存储引擎类型,字符集,排序规则
列名字:
列属性:数据类型,约束,其他属性
数据行
5.字符集(charset)
相当于MySQL的密码本(编码表)
show charset;
utf8 :3字节
utf8mb4 :4字节,支持emoji(表情)
6.排序规则:collation
mysql> show collation;
对于英文字符串的大小写的敏感
utf8mb4_general_ci 大小写不敏感
utf8mb4_bin 大小写敏感(存拼音,日文啥的)
7.数据类型介绍
(1)数字
整数
tinyint : -128~127
int :-2的31次方 ~ 2的31次方-1
浮点型数
(2)字符串
char(100)
定长的字符串类型(不管存多少,都会占用100个字符的存储空间,未填满的空间使用空格填充)
varchar
变长字符串类型,每次存储数据之前,都要判断一下长度,按需分配此盘空间
会单独申请一个字符空间的空间存储字符长度(少于255,如超过255,则占用两个存储空间)
8.如何选择这两个数据类型?
(1)少于255个字符串长度,定长的列值,选择char
(2)多于255字符长度,变长的字符串,可以选择varchar
enum 枚举数据类型
address enum(‘sz’,‘sh’,'bj’分别定义为 1 2 3 储存时就储存1 2 3即可)
以上数据类型可能会影响到索引的性能
(3)时间
datetime
范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999。
timestamp
1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。
unix时间戳
timestamp会受到时区的影响
(4)二进制
略了
9.DDL的应用
(1)DDL语句库的定义
创建库
create database zabbix charset utf8mb4 collate utf8mb4_bin;
创建 数据库 库名称 设字符 字符集版本 校对规则 大小写敏感型
查看库情况
show databases;
show create databases zabbix;
删除库(不代表生产操作,必须谨慎)
drop database zabbix;
修改库
注意:一定是从小往大了改,比如utf8--->utf8mb4
目标字符集一定是源字符集的严格超级.
一般默认创建的库都是拉丁
cerate database zabbix;
show create database zabbix;
这就可以看到它的信息为(字符集)拉丁然后修改
alter database zabbix charset utf8mb4;
(2)库的定义规范
建库(名)使用小写字符
建库(名)不能以数字开头(语法就不允许)
不能是数据库内部的关键字
必须设置字符集(charset)
(3)DDL 表定义
建表
表名,列名,列属性,表属性
列属性
primary key | 主键约束,表中只能有一个,非空且唯一 |
---|---|
not null | 非空约束,不允许空值 |
unique key | 唯一键约束.不允许重复 |
default | 一般配合not null一起使用 |
unsigned | 无符号,一般是配合数字列,非负数 |
comment | 注释 |
auto_increment | 自增长的列 |
例如创建一张表格
create table stu (
id int primary key not null auto_increment comment '学号', (第一个列就定义完了)
sname varchar(255) not null comment '姓名',
age tinyint unsigned not null default 0 (默认值) comment '年龄',
gender enum('m','f','n') not null default 'n' comment '性别',
intime datetime not null default now() comment '入学时间'
)engine innodb charset utf8mb4;
这就完成了创建表格.
建表规范
(1) 表名小写字母,不能是数字开头,不能是保留字符,使用和业务有关的表名
(2) 选择合适的数据类型及长度.
(3) 每个列设置 not null+default 对于数据0填充,对字符使用有效字符串
(4) 每个列必须要加注释 commen ‘xxx’
(5) 每个表必须设置存储引擎和字符集
(6) 主键列尽量是无关列数字列,最好是自增长
(7) enum类型不要保存数字,自能是字符串类型.
查询建表信息
show table;
show create table stu;
创建一个表结构一样的表
create table test like stu;
删表(危险命令)
drop table test;
修改表
在stu表中添加qq列
DESC stu;
ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL UNIQUE COMMENT 'qq号';
在sname后加微信列
ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname ;
注意*after sname的位置
在id列前加一个新列num
ALTER TABLE stu ADD num INT NOT NULL COMMENT '数字' FIRST;
DESC stu;
把刚才添加的列都删掉(危险)
ALTER TABLE stu DROP num;
ALTER TABLE stu DROP qq;
ALTER TABLE stu DROP wechat;
修改sname数据类型的属性
ALTER TABLE stu MODIFY sname VARCHAR(128) NOT NULL ;
注意看清楚 modify是修改数据类型
将sgender 改为 sg 数据类型改为 CHAR 类型
ALTER TABLE stu CHANGE sgender sg CHAR(1) NOT NULL DEFAULT 'n' ;
DESC stu;
注意看清楚change是修改数据类型和名
10.DCL
grant
revoke
11.DML
insert
最标准的insert语句
INSERT INTO stu(id,sname,sage,sg,sfz,intime)
VALUES (1,'zs',18,'m','123456',NOW());
SELECT * FROM stu;
省事的写法
INSERT INTO stu
VALUES(2,'ls',18,'m','1234567',NOW());
针对性的录入数据
INSERT INTO stu(sname,sfz)
VALUES ('w5','34445788');
同时录入多行数据
INSERT INTO stu(sname,sfz)
VALUES ('w55','3444578d8'),('m6','1212313'),('aa','123213123123');
三个数据用括号括起来,然后逗号分隔就行