MySQL是用C和C++编写的。它使用C语言来实现其核心部分,如数据库引擎和查询解析器,而使用C++语言来支持更高级的功能和插件。此外,MySQL还使用自己的编程语言和支持多种编程语言的接口来提供丰富的功能和灵活性。
Mysql数据类型
数值数据类型用于存数字
整数类型
(tinyint、smallint、mediumint、int、bigint)
属性字段可以添加auto increment自增约束条件
浮点小数类型(float、double)
定点小数类型(decimal)
时间/日期类型
year、timedatedatetime timestamp
字符串类型用于存储字符串数据,二进制数据
文本字符串(char、 varchar、tinytext text、 mediumtext、 longtext、 enum、set)
二进制字符串
(bit、binary、varbinary、tinyblob、 blog、 mediurfil orabic)
MYSQL常用语句
1、mysql服务的启动和停止
1
| net stop mysql #停止 net start mysql #启动
|
2、登录mysql
1 2 3 4 5 6 7 8 9 10 11
| mysql -h localhost -u root -P 3306 -p
password: *******
-h mysql连接地址
-u mysql登录用户名
-P mysql连接端口(默认为 3306)
-p mysql登录密码(不建议直接在后面写密码[明文])
|
3、密码直接登录mysql
1
| mysql -h localhost -u root -p 123456
|
4、查看数据库
5、创建和删除数据库
1 2 3
| CREATE { DATABASE | SCHEMA } [ IF NOT EXISTS ] db_name [DEFAULT] CHARACTER SET [ = ] charset_name; #创建
DROP DATABASE db_name; #删除
|
6、查看数据库存储引擎、使用数据库、查看当前使用的数据库
SHOW ENGINES; #查看存储引擎
USE db_name; # 使用数据库
SELECT DATABASE(); #查看当前使用的数据库
7、使用SHOW 语句查询mysql支持的存储引擎
1
| SHOW VARIABLES LIKE 'have%'; # 查询支持have开头的存储引擎
|
8、显示库中的数据表
1
| USE db_name; #使用数据库SHOW TABLES; #显示数据表
|
9、创建和删除数据表
1
| CREATE TABLE [IF NOT EXISTS] table_name(column_name column_type...)#创建DROP TABLE table_name; #删除
|
实例:
1
| CREATE TABLE `fa_card_bill` ( `id` int(11) NOT NULL AUTO_INCREMENT, `card_list_id` int(11) NOT NULL COMMENT '手机号id', `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '导入电话', `name` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '费用名称', `money` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '费用金额', `createtime` int(11) NULL DEFAULT NULL COMMENT '添加时间', `add_time` int(11) NULL DEFAULT NULL COMMENT '月份账单', PRIMARY KEY (`id`) USING BTREE) ENGINE = MyISAM AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
|
10、查看数据表的结构
1
| DESC table_name;DESCRIBE table_name;EXPLAIN table_name;SHOW COLUMNS FROM table_name;
|
11、插入数据
1
| INSERT INTO card_bill VALUES (61, '17311112222', 'ddd', '20.33', 1636528616, 1636473600);
|
#或者
1
| INSERT INTO card_bill(card_list_id,phone,name,money,createtime,add_time) VALUES (61, '17311112222', 'ddd', '20.33', 1636528616, 1636473600);
|
12、查询数据
1
| SELECT * FROM tb1 WHERE name='李四';
|
13、UPDATE 查询
将字段中的特定字符串批量修改为其他字符串时,可已使用以下操作:
1 2 3
| UPDATE table_name SET field = REPLACE(field, 'old-value', 'new-value') [WHERE Clause] ;
UPDATE tb1 SET name = REPLACE (name,'a','aaa') WHERE id = 1;
|
14、基本的使用形式为
1 2 3
| UPDATE table_name SET column_name = new-value [WHERE Clause] ;
UPDATE tb1 SET status = DEFAULT WHERE id = 4 ;
|
15、DELETE 语句
1 2 3
| DELETE FROM table_name [WHERE Clause];
DELETE FROM tb1 WHERE id= '7777';
|
16、LIKE
注意:没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的
1 2 3
| SELECT * FROM table1 WHERE name LIKE 'aaa%';
SELECT * FROM table1 WHERE name LIKE '%aaa' AND id = '1%';
|
17、UNION
NION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
1 2 3
| SELECT expression1, expression2, ... FROM table_name [WHERE conditions] >UNION [ ALL | DISTINCT ] >SELECT expression1, expression2, ... FROM table_name [WHERE conditions];#expression1, expression2, ... : 要检索的列。#tables: 要检索的数据表。 #WHERE conditions: 可选, 检索条件。 #DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。#ALL: 可选,返回所有结果集,包含重复数据。
|
18、排序
使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。默认情况下,它是按升序排列
1
| SELECT * FROM tb1 ORDER BY id DESC;
|
19、分组
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
1
| SELECT column_name, function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name;
|
20、防止表中出现重复数据
20.1、可以在mysql数据表中设置指定的字段为PRIMART KEY (主键)或者UNIQUE(唯一)索引来保证数据的唯一性
20.2、统计重复数据
1
| SELECT COUNT(*) as repetitions, last_name, first_name FROM person_tblGROUP BY last_name, first_name HAVING repetitions > 1;
|
20.3、过滤重复数据
如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。
1
| SELECT DISTINCT last_name, first_name -> FROM person_tbl;
|
#也可以使用 GROUP BY 来读取数据表中不重复的数据:
1
| SELECT last_name, first_name -> FROM person_tbl -> GROUP BY (last_name, first_name);
|
20.4、删除重复数据
如果你想删除数据表中的重复数据,你可以使用以下的SQL语句:
1 2 3 4 5
| CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl GROUP BY (last_name, first_name, sex);
DROP TABLE person_tbl;
ALTER TABLE tmp RENAME TO person_tbl;
|
#也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:
1
| ALTER IGNORE TABLE person_tbl -> ADD PRIMARY KEY (last_name, first_name);
|
21、导出数据
21.1、使用 SELECT … INTO OUTFILE 语句导出数据
1
| SELECT * FROM tb1 -> INTO OUTFILE '/a/aaa.txt';
|
21.2、导出SQL格式的数据
1
| mysqldump -u root -p RUNOOB runoob_tbl > dump.txt
|
#导出整个数据库的数据,可以使用以下命令:
1
| mysqldump -u root -p RUNOOB > database_dump.txt
|
#如果需要备份所有数据库,可以使用以下命令:
1
| mysqldump -u root -p --all-databases > database_dump.txt
|
21.3、将数据表及数据库拷贝至其他主机
如果你需要将数据拷贝至其他的 MySQL 服务器上, 你可以在 mysqldump 命令中指定数据库名及数据表。
在源主机上执行以下命令,将数据备份至 dump.txt 文件中:
1
| mysqldump -u root -p database_name table_name > dump.txt
|
如果完整备份数据库,则无需使用特定的表名称。
如果你需要将备份的数据库导入到MySQL服务器中,可以使用以下命令,使用以下命令你需要确认数据库已经创建:
1
| mysql -u root -p database_name < dump.txt
|
也可以使用以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的,是可以相互访问的:
1
| mysqldump -h other-host.com -P port -u root -p database_name > dump.txt
|