一、用于数据库的链接管理mysql
#MySQL接口自带的命令 \h 或 help 或? 查看帮助 \G 格式化查看数据(key:value) \T 或 tee 记录日志 \c(5.7能够ctrl+c) 结束命令 \s 或 status 查看状态信息 \. 或 source 导入SQL数据 \u或 use 使用数据库 \q 或 exit 或 quit 退出
二、将用户的SQL语句发送到服务器linux
一、命令行管理工具sql
一、备份数据库和表的内容数据库
mysql> help mysql> help contents mysql> help select mysql> help create mysql> help create user mysql> help status mysql> help show
#在MySQL中处理输入文件: #若是这些文件包含SQL语句则称为: #1.脚本文件 #2.批处理文件 mysql> SOURCE /data/mysql/world.sql #或者使用非交互式 mysql</data/mysql/world.sql
01)“强制回应 (Ping)”服务器。 02)关闭服务器。 03)建立和删除数据库。 04)显示服务器和版本信息。 05)显示或重置服务器状态变量。 06)设置口令。 07)从新刷新受权表。 08)刷新日志文件和高速缓存。 09)启动和中止复制。 10)显示客户机信息。
#查看MySQL存活状态 [root@db01 ~]# mysqladmin -uroot -p123 ping #查看MySQL状态信息 [root@db01 ~]# mysqladmin -uroot -p123 status #关闭MySQL进程 [root@db01 ~]# mysqladmin -uroot -p123 shutdown #查看MySQL参数 [root@db01 ~]# mysqladmin -uroot -p123 variables #删除数据库 [root@db01 ~]# mysqladmin -uroot -p123 drop DATABASE #建立数据库 [root@db01 ~]# mysqladmin -uroot -p123 create DATABASE #重载受权表 [root@db01 ~]# mysqladmin -uroot -p123 reload #刷新日志 [root@db01 ~]# mysqladmin -uroot -p123 flush-log #刷新缓存主机 [root@db01 ~]# mysqladmin -uroot -p123 reload #修改口令 [root@db01 ~]# mysqladmin -uroot -p123 password
结构化的查询语句缓存
库对象:库名字、库属性
开发规范:库名小写服务器
#建立oldboy数据库 mysql> create database oldboy; #建立OLDBOY数据库 mysql> create database OLDBOY; #查看数据库 mysql> show databases; #查看oldboy的建立语句(DQL) mysql> show create database oldboy; #查看建立数据库语句帮助 mysql> help create database #建立oldboy数据库添加属性 mysql> create database testa charset utf8;
#删除oldboy数据库 mysql> drop database oldboy;
#修改oldboy数据库属性 mysql> alter database oldboy charset gbk; #查看oldboy的建立语句(DQL) mysql> show create database oldboy;
表对象:列名、列属性、约束ssh
#查看建立表语句帮助 mysql> help create table #建立表 mysql> create table student( sid INT, sname VARCHAR(20), sage TINYINT, sgender ENUM('m','f'), cometime DATETIME);
int: 整数 -231 ~ 231 -1 varchar:字符类型 (变长) char: 字符类型 (定长) tinyint: 整数 -128 ~ 128 enum: 枚举类型 datetime: 时间类型 年月日时分秒
#建立表加其余属性 mysql> create table student( sid INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ‘学号’, sname VARCHAR(20) NOT NULL COMMENT ‘学生姓名’, sage TINYINT UNSIGNED COMMENT ‘学生年龄’, sgender ENUM('m','f') NOT NULL DEFAULT ‘m’ COMMENT ‘学生性别’, cometime DATETIME NOT NULL COMMENT ‘入学时间’)chatset utf8 engine innodb; #查看建表语句 mysql> show create table student; #查看表 mysql> show tables; #查看表中列的定义信息 mysql> desc student;
not null: 非空 primary key: 主键(惟一且非空的) auto_increment: 自增(此列必须是:primary key或者unique key) unique key: 单独的惟一的 default: 默认值 unsigned: 非负数 comment: 注释
#删除表 mysql> drop table student;
#修改表名 mysql> alter table student rename stu; #添加列和列定义 mysql> alter table stu add age int; #添加多个列 mysql> alter table stu add test varchar(20),add qq int; #指定位置进行添加列(表首) mysql> alter table stu add classid varchar(20) first; #指定位置进行添加列(指定列) mysql> alter table stu add phone int after age; #删除指定的列及定义 mysql> alter table stu drop qq; #修改列及定义(列属性) mysql> alter table stu modify sid varchar(20); #修改列及定义(列名及属性) mysql> alter table stu change phone telphone char(20);
针对权限进行控制ide
#受权root@10.0.0.51用户全部权限(非炒鸡管理员) mysql> grant all on *.* to root@'10.0.0.51' identified by 'oldboy123'; #怎么去受权一个炒鸡管理员呢? mysql> grant all on *.* to root@'10.0.0.51' identified by 'oldboy123' with grant option; #其余参数(扩展) max_queries_per_hour:一个用户每小时可发出的查询数量 max_updates_per_hour:一个用户每小时可发出的更新数量 max_connetions_per_hour:一个用户每小时可链接到服务器的次数 max_user_connetions:容许同时链接数量
#收回select权限 mysql> revoke select on *.* from root@'10.0.0.51'; #查看权限 mysql> show grants for root@'10.0.0.51';
操做表的数据行信息工具
#基础用法,插入数据 mysql> insert into stu values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456); #规范用法,插入数据 mysql> insert into stu(classid,birth.sname,sage,sgender,comtime,telnum,qq) values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456); #插入多条数据 mysql> insert into stu(classid,birth.sname,sage,sgender,comtime,telnum,qq) values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456), ('linux02',2,NOW(),'zhangsi',21,'f',NOW(),111,1234567);
#不规范 mysql> update student set sgender='f'; #规范update修改 mysql> update student set sgender='f' where sid=1; #若是非要全表修改 mysql> update student set sgender='f' where 1=1;
#不规范 mysql> delete from student; #规范删除(危险) mysql> delete from student where sid=3; #DDL删除表 mysql> truncate table student;
1)额外添加一个状态列ui
mysql> alter table student add status enum(1,0) default 1;
2)使用update
mysql> update student set status='0' where sid=1;
3)应用查询存在的数据
mysql> select * from student where status=1;
trigger
select:基础用法
#经常使用用法 mysql> select countrycode,district from city; #查询单列 mysql> select countrycode from city; #行级查询 mysql> select countrycode,district from city limit 2; mysql> select id,countrycode,district from city limit 2,2; #条件查询 mysql> select name,population from city where countrycode='CHN'; #多条件查询 mysql> select name,population from city where countrycode='CHN' and district='heilongjiang'; #模糊查询 mysql> select name,population,countrycode from city where countrycode like '%H%' limit 10; #排序查询(顺序) mysql> select id,name,population,countrycode from city order by countrycode limit 10; #排序查询(倒叙) mysql> select id,name,population,countrycode from city order by countrycode desc limit 10; #范围查询(>,<,>=,<=,<>) mysql> select * from city where population>=1410000; #范围查询OR语句 mysql> select * from city where countrycode='CHN' or countrycode='USA'; #范围查询IN语句 mysql> select * from city where countrycode in ('CHN','USA');
字符集:是一个系统支持的全部抽象字符的集合。字符是各类文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
1)字符集(CHARACTER) 2)校对规则(COLLATION)
1)UTF8 2)LATIN1 3)GBK
1)ci:大小写不敏感 2)cs或bin:大小写敏感
mysql> show charset; mysql> show collation;
[root@db01 ~]# source /etc/sysconfig/i18n [root@db01 ~]# echo $LANG zh_CN.UTF-8
方法1:在编译安装时候就指定以下服务器端字符集。
cmake . -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \
方法2:在配置文件中设置字符集
[mysqld] character-set-server=utf8
mysql> create database oldboy charset utf8 default collate = utf8_general_ci;
mysql> CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
思考问题:若是在生产环境中,字符集不够用或者字符集不合适该怎么处理?

生产环境更改数据库(含数据)字符集的方法
mysql> alter database oldboy CHARACTER SET utf8 collate utf8_general_ci; mysql> alter table t1 CHARACTER SET utf8;
集合:
[zhang3,li4,wang5] [50,70,80]
t1:
sid 1 2 3 sname zhang3 li4 wang5
t2:
sid 1 2 3 mark 50 70 80
范式: 减小数据冗余,防止产生一致性问题,把一个表做为一个原子,把一张表拆到不能再拆为止。(开发阶段设计规范)
例:根据两张表的内容查出张三的成绩
select t1.sname,t2.mark from t1,t2 where t1.sid=t2.sid and t1.sname=’zhang3’;
#世界上小于100人的人口城市是哪一个国家的? select city.name,city.countrycode,country.name from city,country where city.countrycode=country.code and city.population<100;
SELECT city.name,city.countrycode ,countrylanguage.language ,city.population FROM city NATURAL JOIN countrylanguage WHERE population > 1000000 ORDER BY population;
select city.name,city.countrycode,country.name from city join country on city.countrycode=country.code where city.population<100;
建议:使用join语句时,小表在前,大表在后。
select city.name,city.countrycode,country.name from city left join country on city.countrycode=country.code and city.population<100;
#范围查询OR语句 mysql> select * from city where countrycode='CHN' or countrycode='USA'; #范围查询IN语句 mysql> select * from city where countrycode in ('CHN','USA'); 替换为: mysql> select * from city where countrycode='CHN' union all select * from city where countrycode='USA' limit 10
union:去重复合并 union all :不去重复 使用状况:union<union all