目录:
1、mysql用户账号
2、基本查看命令
3、关系型数据库常用组件
4、DDL: Data Defination Language 数据定义语句
常用命令CREATE, DROP, ALTER使用示例
5、DML: Data Manipulation Language 数据处理语句
常用命令INSERT, DELETE, UPDATE使用示例
6、DCL: Data Control Language 数据控制语句
常用命令GRANT, REVOKE使用示例
7、DQL: Data Query Language 数据查询语句
常用SELECT使用示例
8、数据类型
9、定义表的修饰符
10、索引
1、mysql用户账号
① 账号由两部分组成: 'USERNAME'@'HOST' HOST用于限制此用户可通过哪些远程主机连接mysql服务 ② mysql选项: -uUSERNAME: 用户名;默认为root -hHOST: 服务器主机; 默认为localhost -pPASSWORD:用户的密码;建议使用-p,默认为空密码 ③ 支持使用通配符: % 匹配任意长度的任意字符 172.16.0.0/16 或 172.16.%.% _ 匹配任意单个字符
2、基本查看命令
① show databases; 等同于show schemas; #查看数据库列表 ② select user(); #查看登录用户 ③ help [命令] # 查看命令用法每个命令都完×××式和简写格式,mariadb内置命令非sql语句命令可不加“;”结尾 例:status 或 \s help create database help alter table ④ 查看支持所有字符集:show character set; ⑤ 查看支持所有排序规则: show collation; ⑥ 查看支持的引擎: show engines; ⑦ 查看表: show tables [FROM db_name]; ⑧ 查看表结构: desc [db_name.]tb_name; ⑨ 查看表上的索引: show indexes from [db_name.]tbl_name;
3、关系型数据库常用组件
数据库: database 表: table 行: row 列: column 索引: index 视图: view 用户: user 权限: privilege 存储过程: procedure,过程无返回值 存储函数: function,过程有返回值 触发器: trigger 事件调度器: event scheduler,任务计划
4、DDL: Data Defination Language 数据定义语句
用于管理数据库列表。常用命令CREATE, DROP, ALTER
① 创建数据库 create database/schema [IF NOT EXISTS]“数据库名” ② 删除数据库 drop database/schema [IF EXISTS]“数据库名” ③ 创建表单 create table [IF NOT EXISTS] ‘tbl_name’ (col1 type1修饰符, col2 type2 修饰符, ...)
例:
create table students (id int unsigned not null primary key,name varchar (20) not null,age tinyint unsigned); # id int unsigned id, 定义非负数整型 # not null 不允许为空 # primary key 作为主键 # name varchar (20) 可变字符串,显示20位 # not null 不允许为空 # age tinyint unsigned 年龄,最小非负数整 cretae table test select * from students; #以students表为模板创建test表,两张表相同内容 cretae table test select * from students where 1=0; #跟一个不成立的条件可只复制表结构,不复制表内容
④ 删除表 drop table [IF EXISTS] tb_name; ⑤修改表 :alter table 'tbl_name' 字段: 添加字段: add add col1 data_type [FIRST|AFTER col_name] 删除字段: drop 修改字段: alter(默认值) , change(字段名) , modify(字段属性) 索引: 添加索引: add 删除索引: drop
例:
alter table students RENAME s1; #表单改名 alter table s1 ADD phone varchar(11) AFTER name; #表单在name后面增加字段 alter table s1 MODIFY phone int; #修改表单字段数据类型 alter table s1 CHANGE [COLUMN] phone mobile char(11); #修改表单字段名称 alter table s1 DROP [COLUMN] mobile; #删除列 alter table students ADD gender ENUM('m','f') #添加字段gender,枚举只能是m或者f alter table students CHANGE id sid int UNSIGNEDNOT NULL PRIMARY KEY; #将id字段改名为sid,并修改字段类型 alter table students ADD UNIQUE KEY(name); #修改字段为唯一键 alter table students ADD INDEX(age); #修改字段为索引 alter table students DROP age; #删除age字段
5、DML: Data Manipulation Language 数据处理语句
用于管理表单中数据内容,常用命令INSERT, DELETE, UPDATE
① INSERT语法:
INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} (val1,...),(...),...
例:
insert students values (1,'mage',18); #未指明字段,需按顺序填写 insert students(name,id)values('niu',2); insert students(name,id)values('niu',2),('ma',3),('yang',4); #可加多条记录 insert into test2 select id,name from students; #将students的两个字段导入test2表,两张表对应字段数据类型应一致
② UPDATE语法:
UPDATE tbl_name SET col1=val1, col2=val2, ...[WHERE clause] [ORDER BY 'col_name' [DESC]][LIMIT [m,]n];
例:
update students set age=20 where id=2;
③ DELETE语法:
DELETE FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; #LIMIT [m,]n表示跳过前m个,只去处理后n个
例:
delete from students where id=2;
④ 清空表内容(不记录日志,速度快):
TRUNCATE TABLE tbl_name;
6、DCL: Data Control Language 数据控制语句
用于管理用户权限,常用命令GRANT, REVOKE
创建用户: CREATE USER 'username'@'host' [IDENTIFIED BY 'password']; 删除用户: DROP USER 'username'@'host'; 更改口令三种方法: 1) SET PASSWORD FOR 'user'@'host' = PASSWORD(‘password'); #推荐使用改口令方法 2) UPDATE user SET password=PASSWORD('magedu')WHERE User='root' ; 注意:方法2修改表的命令不会马上生效,需执行FLUSH PRIVILEGES生效 3) /usr/local/mysql/bin/mysqladmin -u root –poldpassword password 'newpassword‘ #shell中更改方法
授权语法:GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION]; 示例: GRANT SELECT,DELETE on testdb.* TO 'testuser'@'%'IDENTIFIED BY 'testpass‘; #授权并创建用户 grant select on wangdb.* to 'wang'@'172.16.%.%' 回收授权:REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host 示例: REVOKE DELETE ON testdb.* FROM 'testuser'@'%‘
注意: MariaDB服务进程启动时会读取mysql库中所有授权表至内存
(1) GRANT或REVOKE等执行权限操作会保存于系统表中, MariaDB的服务进程通常会自动重读授权表,使之生效
(2) 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进
程重读授权表: mysql> FLUSH PRIVILEGES;
7、DQL: Data Query Language 数据查询语句
用于查看数据内容,常用SELECT
① 语法:SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; ② 字段表示法: *: 所有字段 as:字段别名, col1 AS alias1 ③ WHERE clause: 操作符: >, <, >=, <=, ==, != BETWEEN ... AND ... LIKE: %:任意长度的任意字符 _:任意单个字符; RLIKE:正则表达式模式匹配 IS NULL , IS NOT NULL IN (val1,val2,…) 条件逻辑操作: and, or, not
例:
select id 编号,name 名字 from students order by name ; #使用别名显示id,name。以name列顺序显示,在name后加desc表示倒序排(不加默认asc正序排) select id,name from students where name is null; select * from test2 where name like "%a%"; #查看test表中包含a的所有信息 select * from test where id in (1,3,5); #查看表中id为1或3或5的所有信息 select * from test where id >=2 and id <=5; select * from test where id between 2 and 5; #必须小数在前大数在后 select * from test where id != 2; select * from test where id <> 2; #查看id不为2的所有信息 select test.name from test ,test2 where test.name=test2.name; #查找test表和test2表中name字段内容相同的name信息 内连接(取交集): select bj.name from bjcai as bj INNER JOIN zhengzhoucai as zz ON bj.name=zz.name and zz.id=3;
8、数据类型分类及选取原则
8.1MySql支持多种列类型:
数值类型 日期/时间类型 字符串(字符)类型
8.2选择正确的数据类型对于获得高性能至关重要,三大原则:
更小的通常更好,尽量使用可正确存储数据的最小数据类型
简单就好,简单数据类型的操作通常需要更少的CPU周期
尽量避免NULL,包含为NULL的列,对MySQL更难优化
8.3数值类型
㈠、整型 tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(+-9.22*10的18次方) |
√ 取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~255)
√ int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围
√ MySQL可以为整型类型指定宽度,例如Int(11),对绝大多数应用这是没有意义的:它不会限制值的合法范围,只是规定了MySQL的一些交互工具(例如MySQL命令行客户端)用来显示字符的个数。
对于存储和计算来说, Int(1)和Int(20)是相同的。
㈡、浮点型(float和double),近似值
float(m,d) 单精度浮点型 8位精度(4字节) m总个数, d小数位 double(m,d) 双精度浮点型 16位精度(8字节) m总个数, d小数位 设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。
㈢、定点数
在数据库中存放的是精确值,存为十进制
decimal(m,d) 参数m<65 是总个数, d<30且 d<m 是小数位
MySQL5.0和更高版本将数字打包保存到一个二进制字符串中(每4个字节存9个数字)。例如, decimal(18,9)小数点两边将各存储9个数字,一共使用9个字节:小数点前的数字用4个字节,小数点后的数字用4个字节,小数点本身占1个字节。
浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。 float使用4个字节存储。 double占用8个字节。
因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用decimal——例如存储财务数据。但在数据量比较大的时候,可以考虑使用bigint代替decimal。
㈣、字符串(char,varchar,_text)
char(n) 固定长度,最多255个字符。如存储三个字符剩余会补齐至n个字符,字符长度统一访问查找速度较快。 varchar(n)可变长度,最多65535个字符。存储几个字符就占几个字符。 tinytext 可变长度,最多255个字符 text 可变长度,最多65535个字符 mediumtext 可变长度,最多2的24次方-1个字符 longtext 可变长度,最多2的32次方-1个字符 BINARY(M) 固定长度,可存二进制或字符,允许长度为0-M字节, VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节
内建类型: ENUM枚举, SET集合
char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格, varchar不限于此。
2.char(n) 固定长度, char(4)不管是存入几个字符,都将占用4个字节, varchar是存入的实际字符数+1个字节(n< n>255),所以varchar(4),存入3个字符将占用4个字节。
3.char类型的字符串检索速度要比varchar类型的快
varchar和text(推荐不使用):
1.varchar可指定n, text不能指定,内部存储varchar是存入的实际字符数+1个字节(n< n>255), text是实际字符数+2个字节。
2.text类型不能有默认值
3.varchar可直接创建索引, text创建索引要指定前多少个字符。varchar查询速度快于text
㈤.二进制数据: BLOB(推荐不使用)
BLOB和text存储方式不同, TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写
BLOB存储的数据只能整体读出
TEXT可以指定字符集, BLOB不用指定字符集
㈥.日期时间类型
date 日期 '2008-12-2' time 时间 '12:25:36' datetime 日期时间 '2008-12-2 22:06:44' timestamp 自动存储记录修改时间 YEAR(2), YEAR(4):年份 若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,这个数据类型的字段可以存放这条记录最后被修改的时间。
9、定义表的修饰符
#所有类型: NULL 数据列可包含NULL值 NOT NULL 数据列不允许包含NULL值 DEFAULT 默认值 PRIMARY KEY 主键 UNIQUE KEY 唯一键 CHARACTER SET name 指定一个字符集 #数值型 AUTO_INCREMENT 自动递增,适用于整数类型 UNSIGNED 无符号
10、索引
索引是特殊数据结构;定义在查找时作为查找条件的字段。优点:提高查询速度。缺点:占用额外空间,影响插入速度。创建索引必须要有索引名称
创建索引:
create INDEX index_name ON tbl_name (index_col_name,...); #指定一个或多个列建立名为index_name的索引 help CREATE INDEX
删除索引:
drop INDEX index_name ON tbl_name;
查看索引:
show INDEXES FROM [db_name.]tbl_name;
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。