ps: 中括弧[]里的內容都是可以省略的,按需要添加 資料庫操作 創建資料庫 if not exists 判斷是否重覆 charset=gbk 簡體中文 gb2312 簡體中文 utf8 通用字元編碼 顯示當前時間、用戶名、資料庫版本 查看資料庫信息 mysql mysql show create ...
ps:
中括弧[]里的內容都是可以省略的,按需要添加
資料庫操作
創建資料庫
語法:create database [if not exists] 數據名 charset=gbk;
create database if not exists tow charset=gbk;
Query OK, 1 row affected
-
if not exists -> 判斷是否重覆
-
charset=gbk -> 簡體中文
-
gb2312 -> 簡體中文
-
utf8 -> 通用字元編碼
顯示當前時間、用戶名、資料庫版本
select now(), user(), version();
+---------------------+----------------+-----------+
| now() | user() | version() |
+---------------------+----------------+-----------+
| 2020-04-23 16:58:06 | root@localhost | 5.5.30 |
+---------------------+----------------+-----------+
1 row in set
查看資料庫信息
語法:show create database 資料庫名;
mysql> show create database tow;
+----------+-------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------+
| tow | CREATE DATABASE `tow` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+-------------------------------------------------------------+
1 row in set
修改資料庫編碼
語法1:alter database 資料庫名 default character set gb2312;
語法2:alter database 資料庫名 character set gbk;
兩種方法都可以更改各類編碼
例一:
alter database tow default character set gb2312;
Query OK, 1 row affected
例二:
alter database tow character set gbk;
Query OK, 1 row affected
查詢有哪些資料庫
show databases;#
+--------------------+
| Database |
+--------------------+
| information_schema |
| frist |
| mysql |
| performance_schema |
| tow |
+--------------------+
5 rows in set
刪除資料庫
語法:drop database 資料庫名;
drop database tow;
Query OK, 0 rows affected
選擇資料庫
語法:use 資料庫名;
use frist;
Database changed
表的操作
創建表
create table 表名(
欄位名 欄位類型 [not null] [primary key] [null] [auto_increment] [comment],
欄位名 欄位類型 [default] #末尾不需要加分號
)[engine=innodb];
-
[engine=innodb] -> 選擇存儲引擎;menory引擎將數據存放在記憶體中,重啟服務後數據會丟失,但是讀取速度快。
-
[not null] -> 不允許為空
-
[null] -> 允許為空
-
[auto_increment] -> 自動遞增 例如編號,預設從1開始如果有輸入就會從你輸入的數開始。
-
[primary key] ->主鍵
-
[comment] -> 備註
-
[default] -> 預設值
-
set nams gbk;
修改表
添加欄位
語法:alter table 表名 add 欄位名 欄位類型;
alter table teacher add addr varchar(50) default'地址不詳' comment'地址';
Query OK, 0 rows affected
在第一個位置上添加欄位
語法:alter table 表名 add 欄位名 欄位類型 first;
alter table teacher add number int comment'編號' first;
Query OK, 0 rows affected
在指定的欄位後添加欄位
語法:alter table 表名add 欄位名 欄位類型 after 指定的欄位名;
alter table teacher add phone varchar(11) not null after name;
Query OK, 0 rows affected
刪除欄位
語法:alter table 表名drop 欄位名;
alter table teacher drop number;
Query OK, 0 rows affected
修改欄位名和類型
語法:alter table 表名 change 原欄位名 新欄位名 數據類型;
alter table teacher change addr dizhi char(100);
Query OK, 0 rows affected
alter table test change id id int auto_increment;
Query OK, 3 rows affected
修改欄位類型不改欄位名
語法:alter table 表名 modify 欄位名 欄位類型;
alter table teacher modify dizhi varchar(50);
Query OK, 0 rows affected
修改表名
alter table 表名 rename to 新表名;
alter table teacher rename to techer;
Query OK, 0 rows affected
查詢有哪些表
show tables;
+-----------------+
| Tables_in_frist |
+-----------------+
| stu |
| sudent |
| teacher |
+-----------------+
3 rows in set
刪除表
語法:drop table [if exists]表名;
drop table if exists stu;
Query OK, 0 rows affected
沒有stu表不加 if exists 的情況
drop table stu;
1051 - Unknown table 'stu'
沒有stu表但是加了 if exists 後
drop table if exists stu;
Query OK, 0 rows affected
複製表
複製表結構和數據;不能複製表的主鍵,但能夠複製表的數據
語法一:create table 新表名 select * from 需要複製的表名;
create table 複製後存放的表名 as(select * from 需要複製的表名); #效果和上面的完全相同
mysql> create table stu1 select * from stu;
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from stu1;
+----+--------+------+-------+
| id | name | addr | score |
+----+--------+------+-------+
| 1 | 馬雲 | 杭州 | 77 |
| 2 | 馬化騰 | 深圳 | 66 |
| 3 | 馬斯特 | 美國 | 60 |
+----+--------+------+-------+
3 rows in set
mysql> desc stu1; #主鍵不能被覆制
+-------+-------------+------+-----+----------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+----------+-------+
| id | int(11) | NO | | 0 | |
| name | varchar(20) | NO | | NULL | |
| addr | varchar(50) | YES | | 地址不詳 | |
| score | int(11) | YES | | NULL | |
+-------+-------------+------+-----+----------+-------+
4 rows in set
複製表的結構;只能複製表結構,不能複製表數據
語法二:create table 新表名 like 需要複製的表名;
mysql> create table stu2 like stu;
Query OK, 0 rows affected
mysql> select * from stu2;
Empty set
mysql> desc stu2; #主鍵被覆制了
+-------+-------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+----------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| addr | varchar(50) | YES | | 地址不詳 | |
| score | int(11) | YES | | NULL | |
+-------+-------------+------+-----+----------+----------------+
4 rows in set
顯示創建表的語句
語法:show create table 表名;
show create table test;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
查看表結構
語法:desc 表名; #縮寫
describe 表名;
describe test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set
修改表編碼
(解決中文編碼問題)
alter table 表名character set gbk;
alter table 表名 convert to character set utf8;
set names gbk; #最簡單的方法,修改整個資料庫
最後面的都是編碼名稱,按需要填寫,一般常用的也就 gbk/utf8/gb2312
數據操作
創建測試表
create table stu(
-> id int auto_increment primary key comment'主鍵',
-> name varchar(20) not null,
-> addr varchar(50) default'地址不詳',
-> score int comment'成績'
-> );
Query OK, 0 rows affected
插入一條數據
語法:insert into 表名(欄位名,欄位名,…)values(欄位值,…,欄位值);
例一:
insert into stu (id,name,addr,score) values(19022100,'tom','北京',88);
Query OK, 1 row affected
例二:插入的欄位可以和表的欄位順序不一致只要一一對應即可
insert into stu(name,score,addr,id) values('berry',77,'北京',2);
Query OK, 1 row affected
例三:可以只插入部分欄位,但是非空欄位必須插入
insert into stu(id,name,addr) values(19,'ketty','上海');
Query OK, 1 row affected
例四:自動增長列的值可以不用也可以直接插入null,資料庫會自動插入增長的數
insert into stu(name,addr) values('rose','北京');
Query OK, 1 row affected
例五:插入值的順序和個數與表欄位的順序和個數一致,插入的欄位可以省略
insert into stu values(null,'大海','廣西',100);
Query OK, 1 row affected
例七:通過default關鍵字插入預設值
insert into stu values(null,'toni',default,50);
Query OK, 1 row affected
查詢表裡的所有數據
語法:select * from 表名;
select * from stu;
+----------+------+------+-------+
| id | name | addr | score |
+----------+------+------+-------+
| 19022100 | tom | 北京 | 88 |
+----------+------+------+-------+
1 row in set
插入多條數據
語法:insert into 表名 values(欄位值1,...,欄位值n),....,(欄位值1,...欄位值n);
insert into stu values(null,'馬雲','杭州',66),(null,'馬化騰','深圳',55);
Query OK, 2 rows affected
更新數據
語法:update 表名 set 欄位值=值 [where 條件];
例一:把2號學生的地址改為湖北
update stu set addr = '湖北' where id = 2;
Query OK, 1 row affected
例二:把馬雲的成績改為99
update stu set score = 99 where name = '馬雲';
Query OK, 1 row affected
例三:將馬化騰的地址改為廣東,成績改為80
update stu set addr = '廣東',score = 80 where name = '馬化騰';
Query OK, 1 row affected
例四:將北京的學生成績全部改為77
update stu set score = 60 where addr = '北京';
Query OK, 2 rows affected
例五:將學號為1,2的兩位學生成績改為65
update stu set score = 65 where id = 1 or id = 2;
Query OK, 2 rows affected
條件可以省略,但是如果省略就是更改所有數據
刪除數據
語法:delete from 表名 [where 條件];
例一:刪除學號是2的學生
delete from stu shere id = 2;
例二:刪除小於等於65分的學生
delete from stu where score <= 65;
Query OK, 4 rows affected
例三:刪除表中所有記錄
delete from stu;
Query OK, 3 rows affected
清空表
語法:truncate table 表名;
truncate table stu;
Query OK, 0 rows affected
delete from 和 truncate table 的區別:
- delete from :遍歷表記錄,一條一條的刪除。
- truncate table:將原表銷毀再創建一個結構相同的新表。這方法更高效
查詢表
語法:select 列名 from 表名;
例一:
mysql> select id,name from stu;
+----+--------+
| id | name |
+----+--------+
| 1 | 馬雲 |
| 2 | 馬化騰 |
| 3 | 馬斯特 |
+----+--------+
3 rows in set
mysql> select * from stu; # *號表示所有欄位
+----+--------+------+-------+
| id | name | addr | score |
+----+--------+------+-------+
| 1 | 馬雲 | 杭州 | 77 |
| 2 | 馬化騰 | 深圳 | 66 |
| 3 | 馬斯特 | 美國 | 60 |
+----+--------+------+-------+
3 rows in set
字元集
字元集:字元在保存和傳輸是對應的二進位編碼集合。
創建測試數據表
create table test(
-> id int primary key,
-> name varchar(20)
-> );
Query OK, 0 rows affected
set names gbk; #設置服務端 和返回值的編碼格式為gbk
字元編碼錯誤錯誤
1366 - Incorrect string value: '\xAC\xE5\x8C\x96\xE8\x85...' for column 'name' at row 1
解決方法:將編碼改為與資料庫匹配的編碼
set names 編碼名稱;
後續持續更新關註我第一時間獲得更新情況