SQL语言分为以下4个部分:
(1)数据定义语言(DDL):DROP、CREATE、ALYER等集中负责数据结构定义与数据库对象定义的语言。
(2)数据操作语言(DML):INSERT、UPDATE、DELETE等语句。
(3)数据查询语言(DQL):SELECT语句。
(4)数据控制语言(DCL):GRANT、REVOKE、COMMIT等是用来设置或者更改数据库用户或角色权限的语句。

初始root密码:
[root@localhost ~]# /usr/bin/mysqladmin -u root password ‘new_passwd’
mysql更改密码的三种方法:

1、[root@localhost ~]# mysqladmin -uroot -p原密码 password ‘新密码’
2、mysql>update mysql.user set password=’linuxunix’ where user=’root’ and host=’localhost’; (明文加密)
mysql>update mysql.user set password=password(‘新密码’) where user=’root’ and host=’localhost’;
mysql>flush privileges;
3、mysql>set password = password(‘linuxunix’);
mysql> flush privileges;
库操作
查看mysql字符集:

mysql> show create database zabbix\G;
* 1. row *
Database: zabbix
Create Database: CREATE DATABASE zabbix /!40100 DEFAULT CHARACTER SET utf8 /
1 row in set (0.00 sec)

创建数据库并指定编码:
GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

UTF8: CREATE DATABASE test2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
查看数据库当前用户、时间、版本等:
mysql> select user()
-> ;
+—————-+
| user() |
+—————-+
| root@localhost |
+—————-+
1 row in set (0.00 sec)
mysql> select now();
+———————+
| now() |
+———————+
| 2015-12-11 11:16:44 |
+———————+
1 row in set (0.02 sec)

mysql> select version();
+———–+
| version() |
+———–+
| 5.1.73 |
+———–+
1 row in set (0.00 sec)
查找某些数据库:
mysql> show databases like ‘%te%’;
+—————–+
| Database (%te%) |
+—————–+
| test |
| test2 |
+—————–+
2 rows in set (0.00 sec)

删除数据库:
mysql> drop database test2;
Query OK, 0 rows affected (0.04 sec)

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| test |
| zabbix |
+——————–+
4 rows in set (0.00 sec)

查看数据库包含的表信息:
mysql> use zabbix
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>
mysql> show tables;
+———————–+
| Tables_in_zabbix |
+———————–+
| acknowledges |
| actions |
| alerts |
| application_template |
| valuemaps |
+———————–+
104 rows in set (0.00 sec)

删除Mysql系统的多余账号:
语法:dorp user ‘用户名’@’主机域’;
mysql> drop user ‘zabbix’@’localhost’;
Query OK, 0 rows affected (0.00 sec)
注意:如果drop删除不了(一般是特殊字符或者大写),可以用下面方式删除:
mysql> delete from mysql.user where user=’用户’ and host=’主机域’;
mysql> flush privileges;

创建Mysql用户及赋予用户权限
通过help查看grant命令帮助
mysql> help grant
Name: ‘GRANT’
……..部分省略
CREATE USER ‘jeffrey’@’localhost’ IDENTIFIED BY ‘mypass’;
GRANT ALL ON db1. TO ‘jeffrey’@’localhost’;
GRANT SELECT ON db2.invoice TO ‘jeffrey’@’localhost’;
GRANT USAGE ON
.* TO ‘jeffrey’@’localhost’ WITH MAX_QUERIES_PER_HOUR 90;
……..部分省略

通过grant命令简单语法如下:
1、 grant 命令简单语法如下:
grant all privileges on dbname. to username@localhost identified by ‘passwd’;
说明:上述命令是授权localhost主机上通过用户username管理dbname数据库的所有权限,密码为passwd。
2、 操作实例:创建linuxunix用户,对test库具备所有权限,允许从localhost主机登陆管理数据库,密码为linuxunix。
grant all privileges on test.
to ‘linuxunix’@’localhost’ identified by ‘linuxunix’;

查看当前数据库用户情况,然后执行对应命令授权如下:
mysql> grant all privileges on test.* to ‘linux’@’localhost’ identified by ‘linux’;
Query OK, 0 rows affected (0.00 sec)
查看授权后Mysql用户列表情况:
mysql> select user,host from mysql.user;
+———–+———————–+
| user | host |
+———–+———————–+
| root | 127.0.0.1 |
| | localhost |
| linux | localhost |
| linuxunix | localhost |
| | localhost.localdomain |
+———–+———————–+
5 rows in set (0.00 sec)

Mysql 用户可以授权的权限有哪些:
SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER,INSERT

表操作
指定字符集建表:
mysql> create database test2;
Query OK, 1 row affected (0.00 sec)
mysql> show create database test2;
+———-+——————————————————————+
| Database | Create Database |
+———-+——————————————————————+
| test2 | CREATE DATABASE test2 /!40100 DEFAULT CHARACTER SET latin1 / |
+———-+——————————————————————+
默认新增库是latin1字符。
新增表语法:
Create table <表名>(
<字段名1> <类型1>,
<字段名2> <类型2>,

<字段名n> <类型n>
);

创建主键索引的方法:
1、 在建表时可以增加主键索引的语句如下:
Create table student(
Id int(4) not null AUTO_INCREMENT,
Name char(20) not null,
Age tinyint(2) NOT Null default ‘0’,
Dept varchar(16) default Null,
primary key(id),
KEY index_name(name)
);
提示: primary key(id), #主键
KEY index_name(name)#name字段普通索引

提示:PRI为主键的标识,MUL为普通索引的标识。

创建主键索引:
mysql> alter table student change id id int primary key auto_increment;
mysql> desc student;
+——-+————-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(20) | NO | | NULL | |
| Age | tinyint(2) | NO | | 0 | |
| Dept | varchar(16) | YES | | NULL | |
+——-+————-+——+—–+———+—————-+
4 rows in set (0.00 sec)
在name列上添加索引,索引名为index_name;
mysql> alter table student add index index_name(Name);
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+——-+————-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(20) | NO | MUL | NULL | |
| Age | tinyint(2) | NO | | 0 | |
| Dept | varchar(16) | YES | | NULL | |
+——-+————-+——+—–+———+—————-+
4 rows in set (0.00 sec)
创建索引相关命令集合:
创建主键索引:
mysql> alter table student change id id int primary key auto_increment;
创建唯一索引:
mysql> create ind_name_dept on student(name,dept);
删除主键索引:
mysql> alter table student drop primary key;
创建普通索引:
mysql> alter table student add index index_dept(dept(8));
根据列的前N个字符创建索引:
mysql> create index index_dept on student(dept(8));
根据多个列创建联合索引
mysql> create index index_name_dept on student(name,dept);
根据多个列前N个字符创建联合索引
mysql> create index index_name_dept on student(name(8),dept(10));
删除普通索引:
mysql>alter table student drop index index_dept;
mysql>drop index index_dept on student;
提示:
1、 要在表的列上创建索引。
2、 索引会加快查询速度,但是会影响更新的速度,因为要维护索引。
3、 索引不是越多越好,要是在频繁查询的where后的条件列上创建索引
4、 小表或唯一值极少的列上不建立索引,要在大表以及不同内容多的列上创建索引。
查询数据
(1)、命令语法:select <字段1,字段2….> from <表名> where <表达式>
(2)、例子:
mysql> select from test;
+—-+——–+
| id | name |
+—-+——–+
| 1 | centos |
| 2 | redhat |
| 3 | ubuntu |
| 4 | SUSE |
| 5 | AIX |
+—-+——–+
5 rows in set (0.00 sec)
mysql> select id,name from test where id=1;
+—-+——–+
| id | name |
+—-+——–+
| 1 | centos |
+—-+——–+
1 row in set (0.00 sec)
mysql> select id,name from test where id=1 and name=’centos’; #and代表两边要同时成立要是or则取并集。
+—-+——–+
| id | name |
+—-+——–+
| 1 | centos |
+—-+——–+
1 row in set (0.00 sec)
mysql> select id,name from test where id>2 and id<5;
+—-+——–+
| id | name |
+—-+——–+
| 3 | ubuntu |
| 4 | SUSE |
+—-+——–+
2 rows in set (0.00 sec)
*排序:

语法:order by <字段> + asc升序/desc倒序:
例子:

mysql> select id,name from test order by id asc;
+—-+——–+
| id | name |
+—-+——–+
| 1 | centos |
| 2 | redhat |
| 3 | ubuntu |
| 4 | SUSE |
| 5 | AIX |
+—-+——–+
5 rows in set (0.00 sec)

mysql> select id,name from test order by id desc;
+—-+——–+
| id | name |
+—-+——–+
| 5 | AIX |
| 4 | SUSE |
| 3 | ubuntu |
| 2 | redhat |
| 1 | centos |
+—-+——–+
5 rows in set (0.00 sec)
往表中插入数据:
(1) 语法命令:Insert into <表名> [ (<字段名1>[…<字段名n>])] values (值1)[,(值n)]
(2) 新增一个简单的测试test
mysql> create table test( id int(4) NOT NULL AUTO_INCREMENT,name char(20) not null,PRIMARY KEY (id) );
mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| student |
| test |
+—————-+
2 rows in set (0.00 sec)
往表中插入数据的不同的语法例子:
1、 指定所有列名,并且每列都插入值
mysql> Insert into test(id,name) values(1,’centos’);
Query OK, 1 row affected (0.03 sec)
2、 由于id列为自增的,所以可以只在name列插入值
mysql> select * from test;
+—-+——–+
| id | name |
+—-+——–+
| 1 | centos |
+—-+——–+
1 row in set (0.00 sec)

mysql> insert into test(name) values(‘redhat’);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+—-+——–+
| id | name |
+—-+——–+
| 1 | centos |
| 2 | redhat |
+—-+——–+
2 rows in set (0.00 sec)
3、 如果不指定列,则要按规矩为每列都插入适当的值。
mysql> insert into test values(3,’ubuntu’);
4、 批量插入数据
mysql> insert into test values(4,’SUSE’),(5,’AIX’);

修改表中数据
命令语法:update 表名 set 字段=新值 where 条件(一定要注意)
1、 修改指定行字段内容
mysql> select * from test;
+—-+——–+
| id | name |
+—-+——–+
| 1 | centos |
| 2 | redhat |
| 3 | ubuntu |
| 4 | SUSE |
| 5 | AIX |
+—-+——–+
5 rows in set (0.00 sec)

mysql> update test set name=’windonws’ where id=3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from test;
+—-+———-+
| id | name |
+—-+———-+
| 1 | centos |
| 2 | redhat |
| 3 | windonws |
| 4 | SUSE |
| 5 | AIX |
+—-+———-+
5 rows in set (0.00 sec)

2、 全部更改:
mysql> update test set name=’win10’; #此方法慎用
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0
mysql> select from test;
+—-+——-+
| id | name |
+—-+——-+
| 1 | win10 |
| 2 | win10 |
| 3 | win10 |
| 4 | win10 |
| 5 | win10 |
+—-+——-+
5 rows in set (0.00 sec)
删除表中数据:
mysql> select
from test;
+—-+——–+
| id | name |
+—-+——–+
| 1 | centos |
| 2 | redhat |
| 3 | ubuntu |
| 4 | SUSE |
| 5 | AIX |
+—-+——–+
5 rows in set (0.04 sec)
mysql> delete from test where id=5; #不加条件就是全部删除,此方法慎用
Query OK, 1 row affected (0.00 sec)
mysql> select from test;
+—-+——–+
| id | name |
+—-+——–+
| 1 | centos |
| 2 | redhat |
| 3 | ubuntu |
| 4 | SUSE |
+—-+——–+
4 rows in set (0.00 sec)
*清空表内容

mysql> truncate table test;

增删改表字段
命令语法:alter table 表名 add 字段 类型 其他;

更改表名
1、语法:rename table 原表名 to 新表名;
mysql> rename table test to test2;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| student |
| test2 |
+—————-+
2 rows in set (0.00 sec)
2、alter table 原表名 rename to 新表名;
mysql> alter table test2 rename to test;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| student |
| test |
+—————-+
2 rows in set (0.00 sec)
删除表
mysql> drop table表名;
Query OK, 0 rows affected (0.00 sec)

备份
备份test数据库到/mysqldate目录下
[root@localhost ~]# mysqldump -uroot -pcentos -B test > /mysqldate/test_bak.sql

还原数据库
[root@localhost mysqldate]# mysql -uroot -pcentos test < /mysqldate/test_bak.sql

Comments

2015-12-23