mysql 表相關操作
mysql 表的相關操作
建立表
表的操作需要依賴於庫在建立表的時候需要先指定資料庫
指定資料庫
use 資料庫名;
$ use mydatabase;
mysql> use mydatabase;
Database changed
mysql>
建立資料表
格式
create table [if not exists] 表名(
欄位名 資料型別,
欄位名 資料型別
)[庫選項];
注意事項 建立時必須指定資料庫 欄位與欄位直接以符號逗號隔開 ( , )最後一個欄位不加符號
$ create table if not exists mytabale(
id int,
name varchar(12)
)charset utf8;
mysql> create table if not exists mytabale(
-> id int,
-> name varchar(12)
-> )charset utf8;
Query OK, 0 rows affected (0.07 sec)
第二種方式
create table [if not exists] 資料庫名.表名(
欄位名 資料型別,
欄位名 資料型別
)[庫選項];
這裡不演示 這樣可以直接指定建立到那個資料庫中
檢視資料表
檢視所有表
show tables;
$ show tables;
mysql> show tables;
+----------------------+
| Tables_in_mydatabase |
+----------------------+
| mytabale |
+----------------------+
1 row in set (0.00 sec)
模糊查詢
show table like 'my%';
show table like 'mytab_e';
$ show tables like 'my%';
mysql> show tables like 'my%';
+----------------------------+
| Tables_in_mydatabase (my%) |
+----------------------------+
| mytabale |
+----------------------------+
1 row in set (0.00 sec)
$ show tables like 'mytaba_e';
mysql> show tables like 'mytaba_e';
+---------------------------------+
| Tables_in_mydatabase (mytaba_e) |
+---------------------------------+
| mytabale |
+---------------------------------+
1 row in set (0.00 sec)
查看錶結構
desc/ describe/show columns from 表名;
$ desc mytabale;
mysql> desc mytabale;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(12) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
修改表
修改表可以分為兩個部分
1表本身的一些資料 如表選項
2表內部的一些屬性比如欄位
表本身修改
修改表名
格式 rename table 舊錶名 to 新表名;
rename table mytabale to mytable;
$ rename table mytabale to mytable;
mysql> rename table mytabale to mytable;
Query OK, 0 rows affected (0.02 sec)
修改表選項
alter table 表名 charset utf8;
$ alter table mytable charset utf8;
mysql> alter table mytable charset utf8;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
新增欄位
欄位可修改 新增 重新命名 刪除
新增欄位
完整格式
alter table 表名 [column] 欄位名 資料型別 [列屬性] [位置]
位置
first :第一個位置
after :在哪個欄位之後 after 欄位名 ; 預設的在最後一個欄位之後
alter table mytable add age varchar(20);
$ alter table mytable add age varchar(20);
mysql> alter table mytable add age varchar(20);
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
//查看下錶中欄位已經新增
mysql> desc mytable;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(12) | YES | | NULL | |
| age | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
如果沒有加 資料型別 (varchar(20))會報以下錯誤;
mysql> alter table mytable add age; --沒有加資料型別
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 '' at line 1
修改欄位
alter table 表名 modify 欄位名 資料型別 [列屬性] [位置]
alter table table modify age int after id;
$ alter table mytable modify age int after id;
mysql> alter table mytable modify age int after id;
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
//檢視age的資料 型別 位置已經發生改變了
mysql> desc mytable;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| name | varchar(12) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
重新命名欄位
alert table 表名 change 舊欄位名 新欄位名 資料型別 [屬性] [位置];
演示:alter table mytable change age gender int;
$ alter table mytable change age gender int;
mysql> alter table mytable change age gender int;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
-- 檢視 age已經發生改變 資料型別也可在此修改
mysql> desc mytable;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| gender | int(11) | YES | | NULL | |
| name | varchar(12) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
刪除欄位
在刪除欄位之前先插入一條無用的欄位
alter table 表名 drop 欄位名;
演示 alter table mytable drop sex;
$ alter table mytable drop sex;
-- 執行前後的變化 sex被刪除了
mysql> desc mytable;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| gender | int(11) | YES | | NULL | |
| name | varchar(12) | YES | | NULL | |
| sex | varchar(20) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table mytable drop sex;
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc mytable;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| gender | int(11) | YES | | NULL | |
| name | varchar(12) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql>
注意: 如果表中以有資料執行刪除欄位操作那麼表中該列的資料會被清空(刪除不可逆)
刪除表
刪除表前先準備一張無用表
drop table 表名 ,表名1,表名2;-- 可以同時刪除多張資料表;
演示 drop table class;
$ drop table class;
mysql> show tables;
+----------------------+
| Tables_in_mydatabase |
+----------------------+
| class |
| mytable |
+----------------------+
2 rows in set (0.00 sec)
mysql> drop table class;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------------+
| Tables_in_mydatabase |
+----------------------+
| mytable |
+----------------------+
1 row in set (0.00 sec)
注意 刪除不可逆 ;
資料操作
新增資料
insert into 表名 values (值1,值2,值3)[,(值列表二)];可以同時新增多條資料與表中欄位一一對應;
insert into 表名(欄位列表)values(值1,值2,值3)[,(值列表二)]; 與欄位列表一一對應;
演示
$ insert into mytable values(1,1,'大聖');
mysql> insert into mytable values(1,1,'大聖');
Query OK, 1 row affected (0.00 sec)
注意 name 欄位是varchar型別的所以要使用(“”) 資料庫中單引號與雙引號等價
如果沒使用不正確的型別新增會出以下錯誤
mysql> insert into mytable values(1,1,大聖);
ERROR 1054 (42S22): Unknown column '大聖' in 'field list'
演示
$ insert into mytable(id,name) values(1,'大聖');
mysql> insert into mytable(id,name) values(1,'大聖');
Query OK, 1 row affected (0.01 sec)
檢視資料
select */欄位名 from 表名 [where 條件];
演示
$ select * from mytable;
mysql> select * from mytable;
+------+--------+------+
| id | gender | name |
+------+--------+------+
| 1 | 1 | 大聖 |
| 1 | NULL | 大聖 |
+------+--------+------+
2 rows in set (0.00 sec)
演示
$ select name from mytable;
mysql> select name from mytable;
+------+
| name |
+------+
| 大聖 |
| 大聖 |
+------+
2 rows in set (0.00 sec)
更新資料
update 表名 set 欄位=值[where 條件]
演示
$ update mytable set name = '孫悟空' where gender=1;
mysql> update mytable set name = '孫悟空' where gender=1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from mytable;
+------+--------+--------+
| id | gender | name |
+------+--------+--------+
| 1 | 1 | 孫悟空 |
| 1 | NULL | 大聖 |
+------+--------+--------+
2 rows in set (0.00 sec)
注意where不加會修改全部資料
刪除資料
delete from 表名 [where 條件];
演示
$ delete from mytable where gender =1;
mysql> delete from mytable where gender =1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from mytable;
+------+--------+------+
| id | gender | name |
+------+--------+------+
| 1 | NULL | 大聖 |
+------+--------+------+
1 row in set (0.00 sec)
Web亂碼問題
動態網站由三部分構成: 瀏覽器, web伺服器,資料庫伺服器, 三個部分都有自己的字符集(中文), 資料需要在三個部分之間來回傳遞: 很容易產生亂碼.
如何解決亂碼問題: 統一編碼(三碼合一)
但是事實上不可能: 瀏覽器是使用者管理(根本不可能控制).
但是必須要解決這些問題: 主要靠web端程式碼來轉換