对于这部分如果自己在出错的时候的时候,请自行百度
1:cmd 进入 mysql 安装路径,在window下,还有空格或者汉语路径使用 “”
example cd "Program Files"
2:启动mysql
mysqld install
3:connect mysql
C:\Program Files\xxxxxxxxxx\bin>mysql -uroot -hlocalhost -p
Enter password:
4:在安装mysql中,可能我们都是一路next。并不会特别注意mysql安装的路径以及数据库存放的物理路径,那么可以这么查找
show global variables['vɛrɪəbl] like "%datadir%";
创建用户:
CREATE USER [用户名] @"Ip ADDRESS|%"
IDENTIFIED BY 'PASSWORD'
添加完成之后
flush privileges
指定IP,保障安全性
添加权限:
为什么:当我们添加一个新的user的时候,此时该用户是不能执行过多的操作。如下
C:\Users\welive>mysql -uwang -p
Enter password: ******
Welcome to the MySQL monitor.
mysql> use mysql;
ERROR 1044 (42000): Access denied for user 'wang'@'localhost' to database 'mysql'
授权:
GRANT 权限1,权限2,... ON 数据库名.* TO 用户名 @ 【IP地址|%】
eg:
grant[ɡrænt] select,insert,delete,update,alter on test.* to wangxiaobo @'127.0.0.1';
如果授权所有的数据库就使用 '*.*'
grant all privileges[ˈprɪvəlɪdʒ] on *.* to 'test' @'127.0.0.1';
撤销权限:
REVOKE 权限1,权限2,...ON 数据库名.* FROM 用户名 @【IP地址|%】
eg:
revoke[rɪ'vok] update on test.* from wangxiaobo @'127.0.0.1';
授权一个不存在的用户:
grant select,insert,delete,update on test.* to [用户名]@[Ip|%] identified by "password";
查看权限:
show grants for 'test'@'27.0.0.1';
删除用户:
drop user 'test'@'127.0.0.1';
DQL(data query language)
select [*|columnName)] from [TableName] where [查询条件]
过滤掉重复的值:
SELECT DISTINCT
select distinct[dɪ'stɪŋkt] password from user;
链接字段
SELECT CONCAT(列名,列名) from user;
select concat(name,age) as name_age from user;
select concat_ws("==",name,age) as name_age from user;
对列名重新命名:
select [原列名] as [新列名] from [表名]
模糊查询:
select name from user where name like "%wang%";
排序
select * from tableName order by id ASC(ascending[ə'sɛndɪŋ] order)
select * from tableName order by id DESC(descending[dɪ'sɛndɪŋ]);
聚合函数(分页处理使用的时候)
COUNT(*) 查询这个表中公有多少条数据
select count(*) from tableName;
SUM() 求和
select sum(ColumnName) from tableName;
select sum(columnName) as sum_columnName from tableName;
AVG() average['ævərɪdʒ] 平均值
select avg(columnName) from tableName
MAX() 最大值
MIN() 最小值
分组查询:
select * from tableName group by columnName;
select count(*) as total,sex from tableName group by columnName;
select sex from tableName group by columnName having count(*)>2;
综合查询
连接查询
SELECT U.USER_NAME,H.HOBBIES FROM USERS AS U,HOBBY AS H WHERE U.ID=H.USER_ID;
SELECT U.USER_NAME,H.HOBBIES FROM USERS AS U INNER JOIN HOBBY AS H WHERE|ON U.ID=H.USER_ID;
左连接:
SELECT U.USER_NAME,HHOBBIES FROM USERS AS U LEFT JOIN HOBBY AS H ON U.ID=H.USER_ID;
右连接
SELECT U.USER_NAME,HHOBBIES FROM USERS AS U LEFT JOIN HOBBY AS H ON U.ID=H.USER_ID;
联合查询
SELECT USER_NAME FROM USERS UNION['junɪən] ALL SELECT HOBBIES FROM HOBBY;
子查询
SELECT * FROM USERS WHERE ID IN(SELECT USER_ID FROM HOBBY);
主查询依托于子查询的结果,那么执行顺序就是子查询先行
限制查询条数
SELECT * FROM USERS LIMIT 1;
限制查询次数(默认第一个数为0)
SELECT * FROM USERS LIMIT 2,3;
查询从第二条开始(不包含第二条数据向后查询3条)
实际应用中主要为程序分页
MyISAM
InnoDB
CSV
BLACKHOLE
MEMORY
数据库默认的Engine设置在my.ini配置文件中
目前我的是
# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB
引擎基于数据表,那么如何查看自己创建的表中的引擎
mysql> show create table users;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| users | CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) NOT NULL,
`email` varchar(50) NOT NULL,
`mobile` char(11) NOT NULL,
`fee` decimal(10,2) NOT NULL DEFAULT '0.00',
`age` tinyint(4) NOT NULL,
`gender` char(5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
此时,自己创建表的引擎为数据库中默认的配置。
当然,我们可以在建表的时候配置引擎
create table test(id int unsigned not null auto_incremet primary key,name varchar(30)) engine MyISAM;
查看所有表中的引擎:
show table status\G
查看支持引擎:
show engines\G
修改已经存在的表的引擎
mysql> alter table users engine=MyISAM;
MyISAM
支持全文索引,不支持事务
事务:一个完整的执行过程
InnoDB
支持事务,不支持索引,5.6版本之后开始支持,性能好,行级锁,崩溃处理好
字符集
utf8
gbk(中文编码)
show character set;
show create database test;
创建数据库的时候可以指定字符集
create database test character set gbk;
创建字符集
关于数据库 关于数据表 独立
字符集校对:
utf8_general_ci 不区分大小写
char(3) 字符的长度
select length(columnName) from table Name;
select char_length(columnName) from table Name;
varchar()字节的长度
mysql 的三种mode
mode = ANSI;
设置mysql的模式:
set sql_mode=STRICT_TRANS_TABLES;
DTL 事务控制语言
一条sql语句就是一个事务
事务可以保证一组sql语句要么成功要么都失败。
默认自动执行
1: 关闭set atuocommit=0 关闭自动提交
最后 插入或者修改时,只有commit才回最终存入否则不存
mysql> show variables like "%commit%";
+-----------------------------------------+-------+
| Variable_name | Value |
+-----------------------------------------+-------+
| autocommit | ON |
| binlog_group_commit_sync_delay | 0 |
| binlog_group_commit_sync_no_delay_count | 0 |
| binlog_order_commits | ON |
| innodb_api_bk_commit_interval | 5 |
| innodb_commit_concurrency | 0 |
| innodb_flush_log_at_trx_commit | 1 |
| slave_preserve_commit_order | OFF |
+-----------------------------------------+-------+
8 rows in set, 5 warnings (0.00 sec)
mysql> set autocommit=OFF;
2:start transaction
commit/rollback;
原子性:一个事务中的所有语句,应该做到要么全做,要么都不做
一致性:逻辑合理性
隔离性:如果多个事务同时并发执行,但是每个事务就像独立执行一样
持久性: 一经提交改变,则永久改变
典型的实际例子:银行转账
start transaction;//开启事务
mysql-> /*一系列需要执行的sql语句*/
commit; //成功
或者:
rollback;//失败
/*如果你的数据表中不能执行事务的操作那么必须请查看自己的ENGINE*/
实例:
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> update user set fee 2000 where id=1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2000 where id=1' at line 1
mysql> update user set fee= 2000 where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update user set fee=5000 where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from userl
-> ;
ERROR 1146 (42S02): Table 'bank.userl' doesn't exist
mysql> select * from user;
+----+----------+---------+
| id | name | fee |
+----+----------+---------+
| 1 | 王晓波 | 2000.00 |
| 2 | wedfrend | 5000.00 |
+----+----------+---------+
2 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.06 sec)
mysql> select * from user;
+----+----------+----------+
| id | name | fee |
+----+----------+----------+
| 1 | 王晓波 | 46000.00 |
| 2 | wedfrend | 3000.00 |
+----+----------+----------+
2 rows in set (0.00 sec)
视图
create view ViewName(ColumnName,) as select columnName from TableName where xxx;
create view userView(name)as select user_name from users;
Query OK, 0 rows affected (0.08 sec)
mysql> select * from userView;
触发器
create trigger 触发器名 after|before insert|update|delete on
TableName for each row
begin
sql 语句
end;
show create tigger tiggerName\G;
drop trigger tiggerName;
mysql> create trigger nuum after insert on users for each row
-> begin
-> update hobby set hobbies='wang IAO波' where user_id=10;
-> end//
Query OK, 0 rows affected (0.13 sec)
mysql> delimiter ;
添加索引:
alter table TableName add index|unique|fulltext [indexName]
alter table TableName drop index [IndexName]
索引
primary key() 唯一主键
index 普通索引
key 普通索引
unique 唯一索引
create table user(
-> id int unsigned not null auto_increment,
-> userName varchar(50) not null,
-> passWord varchar(50) not null,
-> email varchar(32) not null,
-> age tinyint unsigned not null,
-> primary key(id),
-> unique(userName),
-> key(age),
-> index(email),
-> fulltext(password)
-> );
mysql> show index from user\G
在一些数据表中无法创建全文索引,原因是你的Engine为InnoDB,需要转换为 MyISAM
对于已经存在的表进行添加索引
alter table TableName add fulltext(columnName);
全文索引:
select * from account where match(password) against('xxxx');
解决模糊查询
外键约束(InnoDB)
foreign key(columnName) references TableName(ColumnName);
如果说两张表含有因果关系的情况,那么在数据表中可以使用外键约束来进行相应的关联处理
注意问题:使用外键约束的字段,类型设置必须一致
create table mark(
id int unsigned not null auto increment,
mark int unsigned not null,
stu_id int not null,
primary key(id),
foreign key(stu_id) references user(id)
);
Mysql 优化
当查询一条sql语句的耗时长达1s的时候,那么证明我们的数据库查询一定存在问题,如果sql语句慢了,解决办法:
1:mysql> show variables like '%slow%';
+---------------------------+-----------------------+
| Variable_name | Value |
+---------------------------+-----------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | -slow.log |
+---------------------------+-----------------------+
5 rows in set, 5 warnings (0.04 sec)
2:set global log_slow_admin_statements=ON;
方法二:看性能
mysql>show variables like '%profiling%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| have_profiling | YES |
| profiling | OFF |
| profiling_history_size | 15 |
+------------------------+-------+
mysql>set profiling=on;
之后执行的sql语句会被记录。然后窒息性相应的方法查看
mysql> show profiles;
+----------+------------+-----------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-----------------------------------+
| 1 | 0.00222050 | show variables like '%profiling%' |
| 2 | 0.00097125 | select * from users |
| 3 | 0.00009375 | show prifiles |
+----------+------------+-----------------------------------+
将时间比较大的语句内容展示详情
mysql> show profile for query 2;
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000109 |
| checking permissions | 0.000013 |
| Opening tables | 0.000033 |
| init | 0.000110 |
| System lock | 0.000021 |
| optimizing | 0.000007 |
| statistics | 0.000025 |
| preparing | 0.000015 |
| executing | 0.000004 |
| Sending data | 0.000270 |
| end | 0.000025 |
| query end | 0.000019 |
| closing tables | 0.000021 |
| freeing items | 0.000190 |
| cleaning up | 0.000112 |
+----------------------+----------+
找到耗时长问题进行处理
简单的查询问题下:加上索引字段,那么sql执行的时候就会查询固定的行
MySql Structured Query Language 整理安装mysql下载网址(选择适合硬件的版本安装)https://dev.mysql.com/downloads/mysql/doc 下启动mysql对于这部分如果自己在出错的时候的时候,请自行百度1:cmd 进入 mysql 安装路径,在window下,还有空格或者汉语路径使用 “” ex...