一.客户端工具
**采用命令行交互式客户端程序:mysql
(1)mysql选项及其用法:
首先通过mysql_secure_installation命令提高数据库的安全
1设置数据库管理员root口令
2 禁止root远程登录
3 删除anonymous用户帐号
4 删除test数据库
(2)此时通过mysql命令来登录数据库
mysql -uroot(指定登录用户) -p123456(登录密码) -hhost(指定服务器主机)
(3)mysql用户账号由两部分组成:
'USERNAME'@'HOST' HOST用于限制此用户可通过哪些远程主机连接mysql服务
支持使用通配符:
% 匹配任意长度的任意字符
172.16.0.0/16 或 172.16.%.%
_ 匹配任意单个字符
(4)mysql中的一些其他命令选项
mysql > status(查看数据库信息)
mysql> select version();——查看版本号
注意:服务端命令:通过mysql协议发往服务器执行并取回结果 每个命令都必须命令结束符号;默认为分号 SELECT VERSION();
二.sql语句
(1)SQL语句构成
Keyword组成clause 多条clause组成语句
SELECT * SELECT子句
FROM products FROM子句
WHERE price>400 WHERE子句
这是一组语句,由三个子句构成,SELECT,FROM和WHERE 都是关键字
例:
(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 关键字不能跨多行写或简写
例:
5 注释
SQL标准:
/注释内容/ 多行注释
-- 注释内容 单行注释,注意有空格
MySQL注释: #
三.数据库操作
1创建数据库
create database db_name(数据库名);
删除数据库
查看表: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;
查看表结构:DESC [db_name.]tb_name;
删除表: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 无符号例子
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;
示例2:
alter table students3 add sex varchar(20) not null default 'm' after name;
示例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;
示例5:修改字段属性
alter table students3 modify phone int (20) not null after age;
示例6:给字段增加索引,给字段增加唯一键
alter table students3 add index(age);
ALTER TABLE students ADD UNIQUE KEY(name);
创建索引——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');
创建多个信息:
insert into students3(id,name,age,phone,gender)values (4,'sun',22,149378,'f'),(5,'lu',23,1232142,'f');
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;
insert into emp1 select * from students3;——表事先存在,并且表的结构和students3相同
清空表:
(1) truncate table +表名;
(2)delete from +表名;
2 update:
update emp1 set age=29 where name='li';——修改li的年龄
示例:
update emp1 set age=21 ,gender='m' where id=5;
五. DQL语句
OL:select
用例子来说明:
例1:
select * from emp1 where age>=18 and age <= 25;——查找年龄在18到25之间的人
例2:
select * from emp1 where age between 18 and 25;
例3:
select * from emp1 where age between 18 and 25 order by age desc——按年龄倒序排序
select * from emp1 where age between 18 and 25 order by age ——正序排序
例4:
select id as 职员,name 姓名 from emp;——设置别名
例5:
倒序排名年龄跳过第一个人,看后两个人
例6:
like用法:
%——任意长度
_:——任意单个字符
rlike:正则表达式
is nul,is null
in ——代表指定特定的人
select * from emp1 where name like 'li';
select * from emp1 where name like 'l%';
正则表达方式:select * from emp1 where name relike 'l.*';
查询指定的人:select * from emp1 where name in ('wang','zhang');
别名关联两个表
六.用户账号
创建用户
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;
七.授权
- 权限级别:管理权限、数据库、表、字段、存储例程
-
授权的命令:
grant all on zhangdb.* to root@'192.168.136.%';——授予所有权利
此时在另一主机就可以通过 mysql -uroot -p1234 -h192.168.136.122进入数据库执行命令
赋予部分权限
grant select,update,delete on zhangdb.* to root@'192.168.136.%';
3 撤销权限
revoke all on zhangdb.* from root@'192.168.136.%';
注意:不论是授予权限还是撤销权限,都要执行FLUSH PRIVILEGES命令才能生效