一>登录mysql数据库(help 命令,例如:help grant)
1>单实例登录:mysql -u root -p
二>修改mysql数据库管理员密码
法一:用mysqladmin更改
A>单实例:
mysqladmin -u root -p '123456' password '1234567'
B>多实例:
mysqladmin -u root -p '123456' password '1234567' -S /data/3306/mysql.sock
法二:用sql语句更改(此法适合密码丢失后通过--skip-grant-tables参数启动数据库后修改密码)
update mysql.user set password=PASSWORD('1234567') where user='root'
法三:用set语句修改
set password=password("123456");
三>创建不同字符集数据库
1>创建默认字符集数据库
mysql> create database oldboy;-------创建名为oldboy的数据库
Query OK, 1 row affected (0.00 sec)
mysql> show create database oldboy\G -----查看oldboy库的建库语句,默认是utf-8的字符集,因为编译安装mysql时指定了utf-8
*************************** 1. row ***************************
Database: oldboy
Create Database: CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET utf8 */
1 row in set (0.01 sec)
2>创建字符集为gbk的数据库
mysql> create database oldboy_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 1 row affected (0.07 sec)
mysql> show create database oldboy_gbk\G
*************************** 1. row ***************************
Database: oldboy_gbk
Create Database: CREATE DATABASE `oldboy_gbk` /*!40100 DEFAULT CHARACTER SET gbk */
1 row in set (0.01 sec)
总结:企业里怎么创建数据库?
1>根据开发的程序确定字符集(建议utf-8)
2>编译安装数据库的时候指定字符集,例如:DEFAULT_CHARSET=utf8
DEFAULT_COLLATION=utf8_general_ci\
然后建库的时候默认创建即可,即create database oldboy
3>编译安装的时候没有指定字符集或者指定了和程序不同的字符集,指定字符集创建数据库即可
create database oldboy_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;----创建gbk字符集数据库
create database oldboy_utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;----创建utf8字符集数据库
当然,数据库要支持创建数据库的字符集。
四>显示mysql数据库
mysql> show databases;----显示所有数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oldboy |
| oldboy_gbk |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql> show databases like 'old%';----模糊查询显示数据库
+-----------------+
| Database (old%) |
+-----------------+
| oldboy |
| oldboy_gbk |
+-----------------+
2 rows in set (0.06 sec)
mysql> select database();----显示当前数据库
+------------+
| database() |
+------------+
| oldboy |
+------------+
1 row in set (0.00 sec)
五>删除mysql数据库
mysql> drop database test;
Query OK, 0 rows affected (0.26 sec)
六>连接mysql数据库
mysql> use oldboy;
Database changed
mysql> select user();---查看用户
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.07 sec)
mysql> select now();---查看时间
+---------------------+
| now() |
+---------------------+
| 2018-09-11 21:18:30 |
+---------------------+
1 row in set (0.06 sec)
mysql> select version();---查看数据库版本
+-----------+
| version() |
+-----------+
| 5.5.32 |
+-----------+
1 row in set (0.07 sec)
七>查询当前的数据库包含的表的信息
mysql> use oldboy;----连接oldboy库
Database changed
mysql> show tables;
Empty set (0.06 sec)
八>创建mysql用户及赋予用户权限
创建oldboy用户,对oldboy库具备所有权限,允许从localhost主机登录管理数据库,密码是oldboy123
mysql> grant all privileges on oldboy.* to 'oldboy'@'localhost' identified by 'oldboy123';--创建用户并赋予权限
Query OK, 0 rows affected (0.09 sec)
mysql> flush privileges;-----权限生效
Query OK, 0 rows affected (0.07 sec)
mysql> show grants for oldboy@localhost;----显示oldboy权限
+---------------------------------------------------------------------------------------------------------------+
| Grants for oldboy@localhost |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'oldboy'@'localhost' IDENTIFIED BY PASSWORD '*FE28814B4A8B3309DAC6ED7D3237ADED6DA1E515' |
| GRANT ALL PRIVILEGES ON `oldboy`.* TO 'oldboy'@'localhost' |
+---------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
九>授权局域网内主机远程连接数据库
根据grant命令语法,我们知道test@'localhost'位置为授权访问数据库的主机,localhost可以用域名,IP地址或者ip段来替代
百分号匹配法:
mysql> create user oldgirl@'192.168.0.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
网段授权:
mysql> create user oldgirl1@'192.168.0.0/255.255.255.0' identified by '123456';----创建oldgril1用户允许从192.168.0.网段连接
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
十>确定mysql的授权授权列表
mysql> show grants for oldboy@localhost;
+---------------------------------------------------------------------------------------------------------------+
| Grants for oldboy@localhost |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'oldboy'@'localhost' IDENTIFIED BY PASSWORD '*FE28814B4A8B3309DAC6ED7D3237ADED6DA1E515' |
| GRANT ALL PRIVILEGES ON `oldboy`.* TO 'oldboy'@'localhost' |
+---------------------------------------------------------------------------------------------------------------+
2 rows in set (0.06 sec)
mysql> REVOKE INSERT ON oldboy.* FROM 'oldboy'@'localhost'; ----收回insert权限
Query OK, 0 rows affected (0.08 sec)
mysql> show grants for oldboy@localhost;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for oldboy@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'oldboy'@'localhost' IDENTIFIED BY PASSWORD '*FE28814B4A8B3309DAC6ED7D3237ADED6DA1E515' |
| GRANT SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `oldboy`.* TO 'oldboy'@'localhost' |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
十一>mysql创建表
DROP TABLE IF EXISTS `bm_jgbm`;
CREATE TABLE `bm_jgbm` (
`bm` varchar(20) NOT NULL,
`mc` varchar(100) DEFAULT NULL,
`version` int(10) DEFAULT '1',
PRIMARY KEY (`bm`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
十二>mysql查看表结构
mysql> desc user; -----查看表结构
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | YES | | | |
| authentication_string | text | YES | | NULL | |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.07 sec)
十三>mysql创建索引
DROP TABLE IF EXISTS `t_sy_institution`;
CREATE TABLE `t_sy_institution` (
`id` int(20) NOT NULL DEFAULT '0',
`parentid` int(20) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`s_state` int(4) DEFAULT NULL,
`zjbzxbm` varchar(20) DEFAULT NULL COMMENT '在住建部制定的编码文档编码表中对应的机构编码',
`jglb` varchar(4) DEFAULT '01',
PRIMARY KEY (`id`),
UNIQUE KEY `zjbzxbm_index` (`zjbzxbm`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
总结:
1>在表的单列或多列上创建索引(建立在表的字段上的一种快速的地址对应关系),可以加快查询速度,分为主键索引,普通索引。索引占用系统空间(空间),更新数据库时需要维护索引(时间),
索引并不是越多越好。索引一定要创建在where后的条件列,数十到几百行的小表上无需建立索引,更新频繁,读取少的表上要少建立索引。尽量选择在唯一值多的大表的字段上建立索引。
2>创建索引相关命令集合:
创建主键索引
alter table student change id id int primary key auto_increment;
删除主键索引
alter table student drop primary key
创建普通索引
alter table student add index index_dept(dept(8))
根据列的前n个字符创建索引
create index index_dept on student(dept(8))
根据多个列创建联合索引
create index ind_name_dept on student(name,dept);
根据多个列的前n个字符创建索引
create index ind_name_dept on student(name(8),dept(10));
删除普通索引
Alter table student drop index index_dept
drop index ind_name_dept on student
创建唯一索引
create unique index uni_ind_name on student(name);
十四>DML语句之insert
1>建立test表
mysql> CREATE TABLE test(
-> id int(4) NOT NULL AUTO_INCREMENT,
-> name char(20) NOT NULL,
-> PRIMARY KEY (id)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.22 sec)
2>按规矩指定所有列名,并且每列都插入值
mysql> insert into test(id,name) value(1,"oldboy");
Query OK, 1 row affected (0.32 sec)
3>由于id列为自增的,所以只在name列插入值
mysql> insert into test(name) value("oldboy");
Query OK, 1 row affected (0.07 sec)
4>如果不指定列,就要按规矩为每列都插入适当的值
mysql> insert into test values(3,'oldboy');
Query OK, 1 row affected (0.01 sec)
5>批量插入数据方法提升效率。
mysql> insert into test values(4,'woshishei'),(5,'nimei');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
6>数据插入成功,然后备份上述数据,留着备用。备份后检查备份的sql数据内容;过滤无用信息。
msyqldump是导出sql语句的形式备份。
mysqldump -uroot -p123456 -B mysql >/opt/mysql_bak.sql
十五>mysql用explain去查看执行计划(有没有走索引)
mysql> select * from test;
+----+-----------+
| id | name |
+----+-----------+
| 1 | oldboy |
| 2 | oldboy |
| 3 | oldboy |
| 4 | woshishei |
| 5 | nimei |
+----+-----------+
5 rows in set (0.07 sec)
mysql> explain select * from test where name='oldboy'\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: test
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 5
Extra: Using where
1 row in set (0.01 sec)
ERROR:
No query specified
mysql> create index index_name on test(name);
Query OK, 0 rows affected (0.22 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc test;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
mysql> explain select * from test where name='oldboy'\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: test
type: ref
possible_keys: index_name
key: index_name
key_len: 60
ref: const
rows: 3
Extra: Using where; Using index
1 row in set (0.01 sec)
ERROR:
No query specified