龙空技术网

MySQL客户端工具及SQL讲解

十维教育 1004

前言:

而今看官们对“source字符集mysql”大约比较着重,咱们都需要剖析一些“source字符集mysql”的相关文章。那么小编也在网摘上收集了一些关于“source字符集mysql””的相关内容,希望你们能喜欢,我们快快来学习一下吧!

一.客户端命令介绍

mysql

1、用于数据库的连接管理

1) 连接(略)

2) 管理:

#MySQL接口自带的命令\h 或 help 或? 查看帮助\G 格式化查看数据(key:value)\T 或 tee 记录日志\c(5.7可以ctrl+c) 结束命令\s 或 status 查看状态信息\. 或 source 导入SQL数据\u或 use 使用数据库\q 或 exit 或 quit 退出

3)接收用户的SQL语句

2、将用户的SQL语句发送到服务器

mysqladmin

1、命令行管理工具

mysqldump

1、备份数据库和表的内容

help命令的使用

mysql> helpmysql> help contentsmysql> help selectmysql> help createmysql> help create usermysql> help statusmysql> help show

source命令的使用

#在MySQL中处理输入文件:#如果这些文件包含SQL语句则称为:#1.脚本文件#2.批处理文件mysql> SOURCE /data/mysql/world.sql#或者使用非交互式mysql</data/mysql/world.sql

mysqladmin命令的使用

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

二.接收用户的SQL语句

1.什么是SQL

结构化的查询语句

2.SQL的种类

DDL:数据定义语言

库对象:库名字、库属性

开发规范:库名小写

创建库:create database|schema

#创建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;

删库:drop database

#删除oldboy数据库mysql> drop database oldboy;

修改定义库:alter database

#修改oldboy数据库属性mysql> alter database oldboy charset gbk;#查看oldboy的创建语句(DQL)mysql> show create database oldboy;

表对象:列名、列属性、约束

创建表:create table (开发做)

#查看创建表语句帮助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;

修改表定义:alter table (开发做)

#修改表名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);

DCL:数据控制语言

针对权限进行控制

grant

#授权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:允许同时连接数量

revoke

#收回select权限mysql> revoke select on *.* from root@'10.0.0.51';#查看权限mysql> show grants for root@'10.0.0.51';

DML:数据操作语言

操作表的数据行信息

insert

#基础用法,插入数据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);

update

#不规范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;

delete

#不规范mysql> delete from student;#规范删除(危险)mysql> delete from student where sid=3;#DDL删除表mysql> truncate table student;
1、使用伪删除

使用update代替delete

1)额外添加一个状态列

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;
2、使用触发器(了解)

trigger

DQL:数据查询语言

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.什么是字符集(Charset)

字符集:是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

2.MySQL数据库的字符集

1)字符集(CHARACTER)

2)校对规则(COLLATION)

3.MySQL中常见的字符集

1)UTF8

2)LATIN1

3)GBK

4.常见校对规则

1)ci:大小写不敏感

2)cs或bin:大小写敏感

5.我们可以使用以下命令查看

mysql> show charset;mysql> show collation;

四.字符集设置

1.操作系统级别

[root@db01 ~]# source /etc/sysconfig/i18n[root@db01 ~]# echo $LANGzh_CN.UTF-8
2.操作系统客户端级别(SSH)3.MySQL实例级别

方法1:在编译安装时候就指定如下服务器端字符集。

cmake . -DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci \-DWITH_EXTRA_CHARSETS=all \

方法2:在配置文件中设置字符集

[mysqld]character-set-server=utf8
4.建库级别
mysql> create database oldboy charset utf8 default collate = utf8_general_ci;
5.建表级别
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;

五.select的高级用法(扩展)

1.多表连接查询(连表查询)

集合:

[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’;

1.1传统连接(只能内连接,只能取交集)

#世界上小于100人的人口城市是哪个国家的?select city.name,city.countrycode,country.name from city,country where city.countrycode=country.code and city.population<100;

1.2 NATURAL JOIN(自连接的表要有共同的列名字)

SELECT city.name,city.countrycode ,countrylanguage.language ,city.populationFROM city NATURAL JOIN countrylanguage WHERE population > 1000000ORDER BY population;

1.3企业中多表连接查询(内连接)

select city.name,city.countrycode,country.name from city join country on city.countrycode=country.code where city.population<100;

建议:使用join语句时,小表在前,大表在后。

1.4外连接

select city.name,city.countrycode,country.name from city left join country on city.countrycode=country.code and city.population<100;

1.5 UNION(合并查询)

#范围查询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 allselect * from city where countrycode='USA' limit 10

union:去重复合并

union all :不去重复

使用情况:union<union all

标签: #source字符集mysql