1. 程式人生 > >mysql 表相關操作

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端程式碼來轉換