美文网首页
MySQL基本操作

MySQL基本操作

作者: 眼泪成诗HOCC | 来源:发表于2019-07-09 18:14 被阅读0次

登录:

[root@host]# mysql -u root -p

查看版本:

[mysql]> select version();

更改密码:

mysql> alter user user() identified by "123";

创建用户:

查询MySQL用户:

1、查询MySQL数据库中所有用户:

mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

2、查询数据库中具体某个用户的权限:

mysql> show grants for 'root'@'localhost'; 

3、查看user表的表结构。需要具体的项可以根据表的结构来查询。

mysql> desc mysql.user; 

修改用户权限:

mysql> GRANT ALL ON *.* TO `用户名`@`127.0.0.1` WITH GRANT OPTION;


创建数据库:

CREATE DATABASE 数据库名;

CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;     //如果数据库不存在则创建,存在则不创建

删除数据库:

drop database <数据库名>;

注:一个汉字占多少长度与编码有关:

UTF-8:一个汉字=3个字节

删除表内数据:

delete from 表名 where 删除条件;

清除表内数据,保存表结构:

truncate table 表名;

删除表:

drop table 表名;


创建数据表:

CREATE TABLE IF NOT EXISTS `WeeklyPaper`

(`WeeklyPaper_id` INT UNSIGNED AUTO_INCREMENT,

 `WeeklyPaper_date` DATE,

 `WeekArrange` VARCHAR(100) NOT NULL, 

 `PlanNextWeek` VARCHAR(40) NOT NULL, 

 PRIMARY KEY ( `WeeklyPaper_id` )

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

删除数据表:

DROP TABLE table_name ;


插入数据:

INSERT INTO WeeklyPaper 

(WeekArrange, PlanNextWeek)

 VALUES

("数据可视化财务指标数据","巩固数据库+hive查询+python数据处理");


查询表结构:

desc table_name;

查询数据:

SELECT column_name,column_name

FROM table_name

[WHERE Clause]    //包含任何条件

[LIMIT N]    //设定返回记录数

[ OFFSET M]    //语句开始查询的数据偏移量,默认为0;

WHERE子句:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...

[WHERE condition1 [AND [OR]] condition2.....

查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件;

你可以在 WHERE 子句中指定任何条件。

你可以使用 AND 或者 OR 指定一个或多个条件。

WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。

WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。

查询区分大小写:

mysql> SELECT * from runoob_tbl WHERE BINARY runoob_author='RUNOOB.COM';


UPDATE更新:

UPDATE table_name SET field1=new-value1, field2=new-value2[WHERE Clause]

mysql> UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;

UPDATE table_name SET field=REPLACE(field, 'old-string', 'new-string') [WHERE Clause]

UPDATE runoob_tbl SET runoob_title = REPLACE(runoob_title, 'C++', 'Python') where

runoob_id = 3;


DELETE语句:

DELETE FROM table_name [WHERE Clause]

LIKE子句:

SELECT * from runoob_tbl WHERE runoob_author LIKE '%COM';

'%a' //以a结尾的数据

'a%' //以a开头的数据

'%a%' //含有a的数据

'_a_' //三位且中间字母是a的

'_a' //两位且结尾字母是a的

'a_' //两位且开头字母是a的

查询以 java 字段开头的信息。

SELECT * FROM position WHERE name LIKE 'java%';

查询包含 java 字段的信息。

SELECT * FROM position WHERE name LIKE '%java%';

查询以 java 字段结尾的信息。

SELECT * FROM position WHERE name LIKE '%java';


UNION操作符

SELECT expression1, expression2, ... expression_n

FROM tables

[WHERE conditions]

UNION [ALL | DISTINCT]

SELECT expression1, expression2, ... expression_n

FROM tables

[WHERE conditions];

SELECT country, name FROM Websites

WHERE country='CN'

UNION ALL

SELECT country, app_name FROM apps

WHERE country='CN'

ORDER BY country;


ORDER BY子句

mysql> SELECT * from runoob_tbl ORDER BY submission_date ASC;

mysql> SELECT * from runoob_tbl ORDER BY submission_date DESC;

MySQL 拼音排序

如果字符集采用的是 gbk(汉字编码字符集),直接在查询语句后边添加 ORDER BY:

SELECT * FROM runoob_tbl ORDER BY runoob_title;

如果字符集采用的是 utf8(万国码),需要先对字段进行转码然后排序:

SELECT * FROM runoob_tbl ORDER BY CONVERT(runoob_title using gbk);


GROUP BY 语句

mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;

WITH ROLLUP

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数:

mysql> SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;


在多个表中查询数据JOIN

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

查找数据表中 runoob_test_tbl 列是否为 NULL,必须使用 IS NULL 和 IS NOT NULL:

mysql> SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL;


正则表达式

查找name字段中以'st'为开头的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

查找name字段中以'ok'为结尾的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

查找name字段中包含'mar'字符串的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

如果你需要指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)。

删除,添加或修改表字段:

ALTER TABLE testalter_tbl DROP i;

ALTER TABLE testalter_tbl ADD i INT FIRST;

ALTER TABLE testalter_tbl DROP i;

ALTER TABLE testalter_tbl ADD i INT AFTER c;

修改字段类型及名称:

如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

修改字段默认值

mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;

mysql> SHOW COLUMNS FROM testalter_tbl;

mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;    //删除

修改数据表类型:

查看数据表类型可以用SHOW TABLE STATUS 

mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;

mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G

修改表名:

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

修改存储引擎:修改为myisam

alter table tableName engine=myisam;

删除外键约束:keyName是外键别名

alter table tableName drop foreign key keyName;

修改字段的相对位置:这里name1为想要修改的字段,type1为该字段原来类型,first和after二选一,这应该显而易见,first放在第一位,after放在name2字段后面

alter table tableName modify name1 type1 first|after name2;


索引

创建索引:

CREATE INDEX indexName ON mytable(username(length));

修改表结构(添加索引)

ALTER table tableName ADD INDEX indexName(columnName)

创建表时直接指定:

CREATE TABLE mytable(

ID INT NOT NULL, 

username VARCHAR(16) NOT NULL, 

INDEX [indexName] (username(length)) 

); 

删除索引:

DROP INDEX [indexName] ON mytable;


唯一索引

创建唯一索引:

CREATE UNIQUE INDEX indexName ON mytable(username(length))

修改表结构:

ALTER table mytable ADD UNIQUE [indexName] (username(length))

创建表的时候直接指定

CREATE TABLE mytable(

ID INT NOT NULL, 

username VARCHAR(16) NOT NULL, 

UNIQUE [indexName] (username(length)) 

); 


添加删除索引

四种方式添加数据表索引:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。


添加删除主键

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;

mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;


显示索引信息

你可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。

mysql> SHOW INDEX FROM table_name; \G


MySQL复制表

一、获取数据表的完整结构:

mysql> SHOW CREATE TABLE runoob_tbl \G;

二、修改SQL数据表名:

mysql> CREATE TABLE `clone_tbl` (

 -> `runoob_id` int(11) NOT NULL auto_increment, 

 -> `runoob_title` varchar(100) NOT NULL default '', 

 -> `runoob_author` varchar(40) NOT NULL default '', 

 -> `submission_date` date default NULL, 

 -> PRIMARY KEY (`runoob_id`),

 -> UNIQUE KEY `AUTHOR_INDEX` (`runoob_author`)

-> ) ENGINE=InnoDB;

三、在数据库中创建新的克隆表 clone_tbl

mysql> INSERT INTO clone_tbl (runoob_id,

 -> runoob_title, 

 -> runoob_author, 

 -> submission_date) 

 -> SELECT runoob_id,runoob_title, 

 -> runoob_author,submission_date

 -> FROM runoob_tbl;

复制表方法二:

CREATE TABLE targetTable LIKE sourceTable;

INSERT INTO targetTable SELECT * FROM sourceTable;

来给大家区分下mysql复制表的两种方式。

第一、只复制表结构到新表

create table 新表 select * from 旧表 where 1=2

或者

create table 新表 like 旧表 

第二、复制表结构及数据到新表

create table新表 select * from 旧表 


MySQL序列使用

AUTO_INCREMENT

mysql> CREATE TABLE insect

-> (  id INT UNSIGNED NOT NULL AUTO_INCREMENT,    

-> PRIMARY KEY (id),    

-> name VARCHAR(30) NOT NULL, # type of insect   

 -> date DATE NOT NULL, # date collected   

 -> origin VARCHAR(30) NOT NULL # where collected);

mysql> INSERT INTO insect (id,name,date,origin) VALUES

 -> (NULL,'housefly','2001-09-10','kitchen'),   

 -> (NULL,'millipede','2001-09-10','driveway'),    

-> (NULL,'grasshopper','2001-09-10','front yard');

mysql> SELECT * FROM insect ORDER BY id;


获取AUTO_INCREMENT值

在MySQL的客户端中你可以使用 SQL中的LAST_INSERT_ID( ) 函数来获取最后的插入表中的自增列的值。

设置序列开始值:

mysql> CREATE TABLE insect

 -> ( id INT UNSIGNED NOT NULL AUTO_INCREMENT,   

 -> PRIMARY KEY (id),  

 -> name VARCHAR(30) NOT NULL,

 -> date DATE NOT NULL,  

 -> origin VARCHAR(30) NOT NULL)engine=innodb auto_increment=100 charset=utf8;

mysql> ALTER TABLE t AUTO_INCREMENT = 100;

杜峰

相关文章

网友评论

      本文标题:MySQL基本操作

      本文链接:https://www.haomeiwen.com/subject/poefkctx.html