2017 09-25 mysql的基本应用
一.客户端工具
**采用命令行交互式客户端程序:mysql
(1)mysql选项及其用法:
首先通过mysql_secure_installation命令提高数据库的安全
1设置数据库管理员root口令
2 禁止root远程登录
3 删除anonymous用户帐号
4 删除test数据库
image.png
image.png
(2)此时通过mysql命令来登录数据库
mysql -uroot(指定登录用户) -p123456(登录密码) -hhost(指定服务器主机)
image.png
(3)mysql用户账号由两部分组成:
'USERNAME'@'HOST' HOST用于限制此用户可通过哪些远程主机连接mysql服务
支持使用通配符:
% 匹配任意长度的任意字符
172.16.0.0/16 或 172.16.%.%
_ 匹配任意单个字符
image.png
(4)mysql中的一些其他命令选项
mysql > status(查看数据库信息)image.png
mysql> select version();——查看版本号
image.png
注意:服务端命令:通过mysql协议发往服务器执行并取回结果 每个命令都必须命令结束符号;默认为分号 SELECT VERSION();
二.sql语句
(1)SQL语句构成
Keyword组成clause 多条clause组成语句
SELECT * SELECT子句
FROM products FROM子句
WHERE price>400 WHERE子句
这是一组语句,由三个子句构成,SELECT,FROM和WHERE 都是关键字
例:image.png
(2)SQL语句分类
SQL语句:
DDL: Data Defination Language——数据定义语言
CREATE(创建), DROP(删除), ALTER(修改)
DML: Data Manipulation Language ——数据操作语言
INSERT(增加), DELETE(删除), UPDATE(修改)
DCL:Data Control Language——数据控制语言
GRANT(授权), REVOKE(取消授权)
DQL:Data Query Language——数据查询语言
SELECT
(3)sql语言规范
1 大部分时候数据库系统不区分大小写,但是建议用大写
2 字符串敞亮区分大小写
3 在该语句中可以单行或多行书写,但都必须以“;”结尾
4 关键字不能跨多行写或简写
例:image.png
5 注释
SQL标准:
/注释内容/ 多行注释
-- 注释内容 单行注释,注意有空格
MySQL注释: #
三.数据库操作
1创建数据库
create database db_name(数据库名);
image.png
删除数据库
查看表:SHOW TABLES [FROM db_name];
drop database db_name;
查看数据库列表
mysql> show databases;
2 创建表
命令: create table +表的名字
字段信息:
col type1
PRIMARY KEY(col1,...)
INDEX(col1, ...)
UNIQUE KEY(col1, ...)
表选项:
ENGINE [=] engine_name
SHOW ENGINES;查看支持的engine类型
ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT |COMPACT}
获取帮助:
mysql> HELP CREATE TABLE;
3 表操作
查看所有的引擎:SHOW ENGINES;
image.png
查看表结构:DESC [db_name.]tb_name; image.png
删除表:DROP TABLE [IF EXISTS] tb_name;
查看表创建命令:SHOW CREATE TABLE tbl_name;
查看表状态:SHOW TABLE STATUS LIKE 'tbl_name'\G ——换行查看,易读模式
4 数量类型
mysql支持多种列类型;
(1)数值类型
(2)日期/时间类型
(3)字符串类型
选择正确的数据类型原则
(1)更小的通常更好,尽量使用可正确存储数据的最小数据类型
(2)简单就好,简单数据类型的操作通常需要更少的CPU周期
(3)尽量避免NULL,包含为NULL的列,对MySQL更难优化
数据类型一:整型
• 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(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(n) 固定长度,最多255个字符
• varchar(n)可变长度,最多65535个字符
• tinytext 可变长度,最多255个字符
• text 可变长度,最多65535个字符
• mediumtext 可变长度,最多2的24次方-1个字符
• longtext 可变长度,最多2的32次方-1个字符
• BINARY(M) 固定长度,可存二进制或字符,允许长度为0M字节,
• 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
5 修饰符:
所有类型:
• NULL 数据列可包含NULL值
• NOT NULL 数据列不允许包含NULL值
• DEFAULT默认值
• PRIMARY KEY 主键
• UNIQUE KEY 唯一键
• CHARACTER SET name 指定一个字符集
数值型
• AUTO_INCREMENT 自动递增,适用于整数类型
• UNSIGNED 无符号例子
image.png
6 表操作
(1)删除表——drop table +表名;
例: drop table students;该表被删除
(2)修改表——alter table +表名;
alter table students add(增加字段),drop(删除字段)
示例1:
alter table students3 add phone varchar(20) not null after name;
image.png
示例2:
alter table students3 add sex varchar(20) not null default 'm' after name;
image.png
示例3:
alter table students3 drop sex varchar(20) not null default 'm' after name;——删除表中的信息
示例4:修改字段名
alter table studenst3 change sex gender varchar(20) not null default 'm' after name;
image.png
示例5:修改字段属性
alter table students3 modify phone int (20) not null after age;
image.png
示例6:给字段增加索引,给字段增加唯一键
alter table students3 add index(age);
image.png
ALTER TABLE students ADD UNIQUE KEY(name);
image.png
创建索引——create index +索引名 +表名(对哪个字段增加索引)
例:
create index ageindex studenst3(age);
创建索引后通过show index from students3\G来查看索引
删除索引——drop index ageindex students3(age);
四.DML语句
要重点——增(insert) ,删(delete), 改(update)
1 insert
语法: insert into students3(id,name,age,phone,gender)values (1,'zhang',18,167878,'m');
image.png
创建多个信息:
insert into students3(id,name,age,phone,gender)values (4,'sun',22,149378,'f'),(5,'lu',23,1232142,'f');
image.png
select s.id ,e.name from students3 as s,emp1 as e where s.id=e.id and s.name rlike '.[no].';——只要包含no就匹配对应的名字
创建一个新表:
create table emp1(表之前不存在) select * from students3;
image.png
insert into emp1 select * from students3;——表事先存在,并且表的结构和students3相同
清空表:
(1) truncate table +表名;
(2)delete from +表名;
2 update:
update emp1 set age=29 where name='li';——修改li的年龄
image.png
示例:
update emp1 set age=21 ,gender='m' where id=5;
image.png
五. DQL语句
OL:select
用例子来说明:
例1:
select * from emp1 where age>=18 and age <= 25;——查找年龄在18到25之间的人
image.png
例2:
select * from emp1 where age between 18 and 25;
例3:
select * from emp1 where age between 18 and 25 order by age desc——按年龄倒序排序
image.png
select * from emp1 where age between 18 and 25 order by age ——正序排序image.png
例4:
select id as 职员,name 姓名 from emp;——设置别名
例5:
倒序排名年龄跳过第一个人,看后两个人
image.png
例6:
like用法:
%——任意长度
_:——任意单个字符
rlike:正则表达式
is nul,is null
in ——代表指定特定的人
select * from emp1 where name like 'li';
image.png
select * from emp1 where name like 'l%';
image.png
正则表达方式:select * from emp1 where name relike 'l.*';
image.png
查询指定的人:select * from emp1 where name in ('wang','zhang');
image.png
别名关联两个表
![]()
六.用户账号
创建用户
create user 'username'@'host';
例: create userr 'root'@'192.168.136.%' identified by 'magedu';—创建root用户并设置密码为magedu
2 删除用户
drop user 'username'@'host'
3 更改口令
1)et password for 'user'@'host'=password('newpassword');
2)pdate user set password=password('newpassowrd') where user='root';
注意:上面修改表的命令不会马上生效,需执行FLUSH PRIVILEGES生效
4 查看当前用户
select user();
例: select user ,host ,password from mysql.user;
image.png
七.授权
- 权限级别:管理权限、数据库、表、字段、存储例程
-
授权的命令:
grant all on zhangdb.* to root@'192.168.136.%';——授予所有权利
此时在另一主机就可以通过 mysql -uroot -p1234 -h192.168.136.122进入数据库执行命令
image.png
赋予部分权限
grant select,update,delete on zhangdb.* to root@'192.168.136.%';
3 撤销权限
revoke all on zhangdb.* from root@'192.168.136.%';
注意:不论是授予权限还是撤销权限,都要执行FLUSH PRIVILEGES命令才能生效
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png