Mysql学习笔记

MYSQL学习笔记:

1.MYSQL登陆:

mysql -h 127.0.0.1 -uroot -proot


mysql -h hostname|IP -P 端口 -u username -p密码 DatabaseName -e "sql语句"




数据库相关:

2.创建数据库:CREATE DATABASE 库名;

如:CTEATE DATABASE school;(大小写均可)


3.查看数据库:SHOW DATABASES;


4.删除数据库:DROP DATABASE 库名;

如:DROP DATABASE school;


5.查看数据库支持的存储引擎:

SHOW ENGINES\G

SHOW VARIABLES LIKE 'have%';

SHOW VARIABLES LIKE 'storage_engine';





表相关:

6.创建表:CREATE TABLE 表名(属性名 数据类型 【完整性约束条件】,

属性名 数据类型 【完整性约束条件】,

属性名 数据类型 【完整性约束条件】);


如:CREATE TABLE example0(id INT,name VARCHAR(20),sex BOOLEAN);


7.创建带有单字段主键的表:属性名 数据类型 PRIMARY KEY

如:CREATE TABLE example1(stu_id INT PRIMARY KEY,stu_name VARCHAR(20),stu_sex BOOLEAN);


8.多字段主键的表:PRIMARY KEY(属性名1,属性名2....属性名n)

如:CREATE TABLE example2(stu_id INT,course_id INT,stu_name VARCHAR(20),stu_sex BOOLEAN,PRIMARY KEY(stu_id,course_id));



9.设置表的外键:CONSTRAINT 外键别名 FOREIGN KEY(属性1.1,属性1.2) REFERENCES 主表名(属性2.1,属性2.2)

如:CREATE TABLE example3(id INT PRIMARY KEY,stu_id INT,course_id INT,stu_name VARCHAR(20),stu_sex BOOLEAN,CONSTRAINT c_fk FOREIGN KEY(stu_id,course_id) REFERENCES example2(stu_id,course_id));


10.设置非空表:属性名 数据类型 NOT NULL

如:CREATE TABLE example4(stu_id INT PRIMARY KEY,stu_name VARCHAR(20) NOT NULL,stu_sex BOOLEAN);


11.设置表的唯一性约束:属性名 数据类型 UNIQUE

如:CREATE TABLE example5(stu_id INT PRIMARY KEY,stu_name VARCHAR(20) UNIQUE,stu_sex BOOLEAN);


12.设置表的属性值字段自动增加:属性名 数据类型 AUTO_INCREMENT

如:CREATE TABLE example6(stu_id INT PRIMARY KEY AUTO_INCREMENT,stu_name VARCHAR(20) UNIQUE,stu_sex BOOLEAN);


13.设置表的属性的默认属性:属性名 数据类型 DEFAULT 默认值

如:CREATE TABLE example7(stu_id INT PRIMARY KEY AUTO_INCREMENT,stu_name VARCHAR(20) DEFAULT 'ZB',stu_sex BOOLEAN);


14.查看表结构:DESCRIBE 表名;(DESC 表名;)

如:DESC example0;


15.查看详细结构语句:SHOW CREATE TABLE 表名;

如:SHOW CREATE TABLE example1 \G


16.修改表:ALTER TABLE 旧表名 RENAME 新表名;

如:ALTER TABLE example0 RENAME example110;


17.修改字段的数据类型:ALTER TABLE 表名 MODIFY 属性名 数据类型;

如:ALTER TABLE example0 MODIFY name VARCHAR(30);


18.修改字段名:ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型;

如:ALTER TABLE example0 CHANGE stu_name name VARCHAR(20);


19.增加字段:ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST| AFTER 属性2];

如:ALTER TABLE user ADD phone VARCHAR(20);

ALTER TABLE user ADD num INT FIRST;

ALTER TABLE user ADD address CHAR(30) AFTER num;


20.删除字段:ALTER TABLE 表名 DROP 属性名;

如:ALTER TABLE user DROP num;


21.修改字段的排列位置: ALTER TABLE 表名 MODIFY 属性名1 数据类型 FIRST|AFTER 属性名2;

如:ALTER TABLE user MODIFY name VARCHAR(30) FIRST;

ALTER TABLE user MODIFY name VARCHAR(30) AFTER sex;

22.修改表的存储引擎: ALTER TABLE 表名 ENGINE=存储引擎名;

如:ALTER TABLE user ENGINE=MyISAM;


23.删除表的外键约束:ALTER TABLE 表名 DROP FOREIGN KEY 外键别名;

如:ALTER TABLE example DROP FOREIGN KEY c_fk;


24.删除没有被动关联的普通表:DROP TABLE 表名;

如:DROP TABLE example;



索引相关:

25.创建索引:CREATE TABLE 表名(属性名 数据类型 [完整性约束],

属性名 数据类型 [完整性约束],

......

属性名 数据类型[完整性约束],

[UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [别名](属性1[(长度)] [ASC|DESC]));

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON 表名 (属性名[(长度)] [ASC|DESC])

ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名(属性名[(长度)] [ASC|DESC])

如:CREATE TABLE index1(id INT,

name VARCHAR(20),

sex BOOLEAN,

INDEX(id));

CREATE TABLE index2(id INT UNIQUE,

name VARCHAR(20),

sex BOOLEAN,

UNIQUE INDEX index2_id(id));

CREATE INDEX index7_id ON example0(id);

ALTER TABLE example0 ADD INDEX index_id8(id(4));


26.删除索引:DROP INDEX 索引名 ON 表名;

如:DROP INDEX index_id ON index2;




视图相关:

27.创建视图:CREATE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]

VIEW 视图名[(属性清单)]

AS SELECT 语句

[WITH [CASCADED|LOCAL] CHECK OPTION];

如:CREATE VIEW TEST AS SELECT * FROM INDEX1;

CREATE VIEW

worker_view1(name,department,sex,age,address)

AS SELECT name,department.d_name,sex,2009-birthday,address

FROM worker,department WHERE work.d_id=department.d_id

WITH LOCAL CHECK OPTION;

28.查看视图:DESC 视图名;

如:DESC work_views;


29.查看视图的基本信息:SHOW TABLE STATUS LIKE '视图名';

如:SHOW TABLE STATUS LIKE 'work_views';


30.修改视图:CREATE OR REPLACE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]

VIEW 视图名[(属性清单)]

AS SELECT 语句

[WITH [CASCADED|LOCAL] CHECK OPTION];

ALTER [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]

VIEW 视图名[(属性清单)]

AS SELECT 语句

[WITH [CASCADED|LOCAL] CHECK OPTION];

如:CREATE OR REPLACE ALGORITHM=TEMPTABLE

VIEW depaartment_view1(department,function,location)

AS SELECT d_name,function,address FROM department;

ALTER ALGORITHM=TEMPTABLE

VIEW depaartment_view1(department,function,location)

AS SELECT d_name,function,address FROM department;


31.更新视图:UNDATE 视图名 SET 属性名='属性值';

UNDATE view1 SET name=‘科研部’;


32.删除视图:DROP IF EXISTS 视图名;

如:DROP IF EXISTS view1;


查询语句:SELECT 属性列表 FROM 表名或者视图列表 [WHERE 条件表达式1] [GROUP BY 属性名1 [HAVING 条件表达式2]] [ORDER BY 属性名2[ASC|DESC]];

如:SELECT num,name,age,sex,homeeaddr FROM employee;

查询在一个自定义的范围值:SELECT * FROM people WHERE age IN (25,26);

查询在一个自定义的范围值:SELECT * FROM people WHERE age BETWEEN 20 AND 25;

某字段模糊查询:SELECT * FROM people WHERE age LIKE '2%';(%表示任意长度的字符串,_表示一个字符)

查询某个字段是否为空:SELECT * FROM people WHERE info IS NULL;

带AND的多条件查询:SELECT * FROM people WHERE age > 15 AND age <25;

带OR的多条件查询:SELECT * FROM people WHERE name LIKE '张%' OR age <25;(AND的运算级大于OR,就是说又AND和OR同时存在的时候先计算AND)

清除字段中相同的值:SELECT DISTINCT 属性名 如:SELECT DISTINCT age FROM people;

对查询结果按某个字段排序:SELECT * FROM people ORDER BY age;


GROUP BY 与GROUP_CONCAT()函数一起使用:SELECT sex,GROUP_CONCAT(name) FROM people GROUP BY sex;

SELECT sex,GROUP_CONCAT(name) FROM people GROUP BY sex WITH ROLLUP;


LIMIT限制查询结果:LIMIT (初始位置,)记录数

如:SELECT * FROM people LIMIT 1,2;


33.多个表间查询,2个表的内连接查询:SELECT num name,employee.d_id,age,sex,d_name,function FROM employee,department WHERE employee.d_id=department.d_id;


34.外连接查询:SELECT 属性列表 FROM 表名1 LEFT|RIGHT JOIN 表名2 ON 表名1.属性名1=表名2.属性名2;

如:SELECT num name,employee.d_id,age,sex,d_name,function FROM employee LEFT JOIN department ON employee.d_id=department.d_id;


35.子查询:SELECT * FROM employee WHERE d_id IN (SELECT d_id FROM department);

SELECT d_id,d_name from department where d_id!=(select d_id from employee where age=24);

SELECT * FROM employee EXISTS (SELECT d_name FROM department where d_id=1003);

SELECT * FROM computer_stu WHERE score >=ANY(SELECT score FROM scholarship);

SELECT * FROM computer_stu WHERE score >=ALL(SELECT score FROM scholarship);(ANY是满足条件之一即可,ALL所有条件,ANY说的是获得奖学金的人,ALL说的是获得1等奖学金的人)


36.合并查询结果:SELECT 语句1 UNION|UNION ALL SELECT 语句2;


37为表取别名:SELECT * FROM department d where d.id=1001;

38为字段取别名:SELECT id AS department_id FROM department;


39.正则表达式匹配查询:属性名 REGEXP '匹配方式'

^字符串开始

$字符串结束

.任意一个字符

[(^)字符集合](不)匹配字符集合的任意字符

S1|S2|S3匹配s1,s2,s3的任意字符

如:select * from people where age REGEXP '^2';

select * from people where age REGEXP '5$';

39.插入数据:INSERT INTO 表名 VALUES(值1,值2...值n);

INSERT INTO 表名(属性1,属性2.。。属性n) VALUES(值1,值2.。。值n);


INSERT INTO people VLAUES(1001,'zb1','nan','beijing'),

(1002,'zb2','nan','beijing'),

(1003,'zb3','nan','beijing');

40.将查询的结果插入到表中:INSERT INTO people(num,name,sex,age,homeaddr) SELECT * FROM people_1 WHERE num=6;

41.更新数据:UPDATE 表名 SET 属性名1=取值1,属性名2=取值2 where 条件表达式;

如:UPDATE people SET name='zb',homeaddr='beijing' WHERE num=1;


42.删除数据:DELETE FROM 表名 WHERE [条件表达式];

如:DELETE FROM people WHERE num=1;



用户操作:

创建用户:CREATE USER 'test1'@'localhost' IDENTIFIED BY 'PASSWD';

INSERT INTO mysql.user(Host,User,Password) VALUES('localhost','test2',PASSWORD('passwd'));

GRANT SELECT ON database.table(test.*) TO 'user'@'%' IDENTIFIED BY 'passwd';

删除用户:DROP USER 'test'@'localhost';

DELETE FROM mysql.user WHERE Host='hostname' AND User='Username';


root修改自己密码:mysqladmin -uroot -proot password "new_password";

UPDATE mysql.user SET Password=PASSWORD("new_password") WHERE User='root' AND Host='hostname';(加载FLUSH PRIVILEGES)

登陆后用SET PASSWORD=PASSWORD("new_password");

root修改普通用户密码:SET PASSWORD FOR 'username'@'hostname'=PASSWORD("new_password");

UPDATE mysql.user SET Password=PASSWORD("new_password") WHERE User='user' AND Host='hostname';(FLUSH PRIVILEGES)

GRANT SELECT ON database.table(*.*) TO 'user'@'%' IDENTIFIED BY 'passwd';

root密码丢失解决办法:windows系统 停止mysql,然后mysqld --skip-grant-tables

linux系统 停止mysql,然后mysqld_safe --skip-grant-tables或者/etc/init.d/mysql start --mysqld --skip-grant-tables

权限处理:

授权: GRANT SELECT,UPDATE ON *.* TO 'test'@'localhost' IDENTIFIED BY 'test' WITH GRANT OPTION(被授权用户可以授权给别的用户);

回收权限:REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'test'@'localhost';(回收所有权限)

如:REVOKE UPDATE ON *.* FROM 'test'@'localhost';


数据库备份:mysqldump -uroot -p test people >c:\a.sql

备份多个数据库:mysqldump -uroot -p -databases dbname1 dbname2 >backupname.sql

备份所有数据库:mysqldump -uroot -p --all-databases>backupname.sql


数据库还原:mysql -uroot -proot test < c:\a.sql


相同版本间mysql迁移:mysqldump -h name1 -uroot -ppaswd1 --all-databases| mysql -h host2 -uroot -ppassword2


导出查询的部分数据:SELECT 列名 FROM table WHERE 条件语句 INTO OUTFILE '目标文件';


SELECT * FORM test.student INTO OUTFILE 'C:\1.TXT'

FIELDS TERMINATED BY '\、' OPTIONALLY ENCLOSED BY '\"' LINES STARTING BY '\>' TERMINATED BY '\r\n';


用mysqldump导出文本文件:mysqldump -uroot -pPassword -T 目标目录 dbname table [option];

如:mysqldump -uroot -proot -T 'c:\1.txt' "--fields-terminated-by=," "--fields-optionally-enclosed-by=""


用mysql命令导出文本文件:mysql -uroot -pPassword -e "SELECT语句" dbname>c:/name.txt;


用LOAD DATA[LOCAL] INFILE file INTO TABLE table[OPTION];导入文本文件


LOAD DATA INFILE 'C:\student.txt' INTO TABLE student FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';


日志文件:

二进制日志:

启动二进制日志在my.ini中【mysqld】下添加,log-bin=目录+日志名(c:/date),重启mysql服务

查看二进制日志:mysqlbinlog 目录+日志文件(c:/date.000001)

删除所有二进制日志:RESET MASTER;

根据编号删除小于该编号指定的二进制日志:PURGE MASTER LOGS TO 'filename.number';

根据时间删除二进制日志:PURGE MASTER LOGS TO 'yyyy-mm-dd hh:MM:ss';


使用二进制日志还原mysql数据:mysqlbinlog filename.number|mysql -uroot -p


停止和开启二进制日志的方法:SET SQL_LOG_BIN=0(停止,1为开启)


修改错误日志的目录:在my.ini中log-err=目录+日志名

删除错误日志:mysqladmin -uroot -p flush-logs


开启通用查找日志(记录mysql的基础操作):在my.ini中在[mysqld]下添加log=Dir/filename

删除错误日志:mysqladmin -uroot -p flush-logs


慢查询日志:用来记录执行时间超时的查询语句

开启方式:在[mysqld]中添加:log-slow-queries=Dir/filename和long_query_time=n(设定的时间,不设置long_query_time默认是10s)



数据库优化:

查看数据库性能:SHOW STATUS LIKE 'value';(差用value字段:Connetions连接数,Uptime上线时间,Slow_queries慢查询次数,Com_select查询次数,Com_insert插入次数,Com_update更新次数,Com_delete删除次数)


分析查询语句:EXPLAIN(DESC) SELECT 语句;


加快插入速度禁用索引:ALTER TABLE 表名 DISABLE KEYS;

开启索引:ALTER TABLE 表名 ENABLE KEYS;


禁用唯一性检查:SET UNIQUE_CHECKS=0;

开启唯一性检查:SET UNIQUE_CHECKS=1;


分析表:ANALYZE TABLE 表名;

检查表:CHECK TABLE 表名 [option];

优化表:OPTIMIZE TABLE 表名;









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章