129 MySQL表操做

1、表介紹

表就至關於時文件,表中的一條記錄就至關於文件的一行內容,不一樣的是表中的一條記錄有對應的標題,稱之爲表的字段mysql

例子:有一個名爲student的文件sql

id,name,age,sex , course數據庫

1 , 張三,17,男,語文優化

2,李四,18,男,英語編碼

3,王二,19,女,數學code

4 劉一 ,18 ,女, 化學事務

如今咱們把上面的文件改成一個表的話,應該是下面的樣子內存

id name age sex course
1 張三 17 語文
2 李四 18 英語
3 王二 19 數學
4 劉一 18 化學

id,name,age,sex,course 稱之爲上面表的字段,其他的一行內容稱之爲是一條記錄ci

2、建立表

2.1 語法

create table [數據庫名.]表名(字段名1 類型[(寬度) 約束條件],字段名2 類型[(寬度) 約束條件],字段名1 類型[(寬度) 約束條件]);
  • 在同一表中,不能有相同的字段名
  • 寬度和約束條件是可選的
  • 字段名和類型是必需要有的

2.2 建表

1.先建一個庫mydb
create database mydb; 使用默認字符編碼的

2.打開這個mydb數據庫,在這個庫裏建立表t1
use mydb;
create table tb1(id int(1),name varchar(10),age int(2),sex varchar(2),course varchar(8))

# 2.能夠不打開表直接在mydb這個庫裏直接建立表t1
# create table mydb.tb1(id int,name varchar,age int,sex   char,course char);

3.建立表之後顯示mydb庫裏面的全部表
show tables;

4.查看錶t1的結構
desc t1;

5.查看錶t1中的全部記錄
select * from [數據庫名.]t1;

6.查看錶t1中某個字段的數據
select id,name,age,sex,course from t1;

##################################  cmd終端運行  ##########################################
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)

mysql> use mydb;
Database changed
mysql> create table t1 (id int(1),name varchar(10),age int(2),sex varchar(2),course varchar(8));
Query OK, 0 rows affected (0.37 sec)

mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> desc t1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(1)      | YES  |     | NULL    |       |
| name   | varchar(10) | YES  |     | NULL    |       |
| age    | int(2)      | YES  |     | NULL    |       |
| sex    | varchar(2)  | YES  |     | NULL    |       |
| course | varchar(8)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)

mysql> select * from t1;
Empty set (0.00 sec)

mysql> select id,name,age,sex,course from t1;
Empty set (0.00 sec)

########################################## end ########################################

3、數據庫表建立的完整語法

咱們在某些狀況下,建立表的的字段類型長度和約束條件是能夠省略的

數據庫表的引擎:驅動數據的方式 - 數據庫優化

注意:引擎是建表的規定,提供給表使用的,, 不是數據庫

  • 展現全部引擎:show engines

  • 四種引擎

    • innodb(建立表時默認的):支持事務,行級鎖,外鍵

      create table t11(id int)engine=innodb;
    • myisam:查詢的效率要優於innodb,不須要支持事務,行級鎖, 外鍵, 可經過設置myisam來優化數據庫

      create table t12(id int)engine=myisam;
    • blackhole:存進去的數據都會消失(能夠理解不存數據)

      create table t13(id int)engine=blackhole;
    • memory:表結構式存儲在硬盤上的,可是表數據所有存儲在內存中(斷電即消失的)

      create table t14(id int)engine=memory;

4、表中插入數據

4.1 語法

insert [into] [數據庫名.]表名[(字段名1,字段名2,字段名3····)] values(字段對應的值)
  • 插入數據時,一條數據的每個字段都要和最開始建立表時的字段對應
  • 而且輸入的數據要和字段的約束類型一致
  • 中括號的字段名是可選的

4.2 插數據

1.在當前數據庫時後表插入一條數據,加中括號帶字段名的(可省略數據庫名.)
use mydb;
insert into t1 (id,name,age,sex,course) values(1,'xichen',18,'女','語文');

2.不在當前數據庫的時候,t1表插入一條數據(記錄)
insert into mydb.t1(id,name,age,sex,course) values(2,'chen',19,'女','數學');

3.省略字段名,向表t1中添加一條數據
insert into t1 values(3,'xixi',19,'男','數學');

4.一次性向表中添加多條數據
insert into t1 values(4,'haha',19,'女','語文'),
                     (5,'lele',19,'男','英語'),
                     (6,'dada',20,'男','數學');
        
        
        
##################################### cmd ############################################### 
        
mysql> use mydb;
Database changed
mysql> insert into t1(id,name,age,sex,course) values(1,'xichen',18,'女','語文');
Query OK, 1 row affected, 2 warnings (0.06 sec)

mysql> insert into mydb.t1(id,name,age,sex,course) values (2,'chen',19,'女','數學');
Query OK, 1 row affected, 2 warnings (0.13 sec)

mysql> insert into t1 values(3,'xixi',19,'男','數學');
Query OK, 1 row affected, 2 warnings (0.13 sec)

mysql> insert into t1 values(4,'haha',19,'女','英語'),(5,'lele',19,'男','語文'),(6,'dada',20,'男','數學');
Query OK, 3 rows affected, 6 warnings (0.13 sec)
Records: 3  Duplicates: 0  Warnings: 6
mysql> select * from t1;
+------+--------+------+------+--------+
| id   | name   | age  | sex  | course |
+------+--------+------+------+--------+
|    1 | xichen |   18 | 女   | 語文   |
|    2 | chen   |   19 | 女   | 數學   |
|    3 | xixi   |   19 | 男   | 數學   |
|    4 | haha   |   19 | 女   | 語文   |
|    5 | lele   |   19 | 男   | 英文   |
|    6 | dada   |   20 | 男   | 數學   |
+------+--------+------+------+--------+
6 rows in set (0.00 sec)
######################################  end #############################################

5、查看錶的結構

5.1 語法

1. desc [tablename]; 能夠查看當前表的結構
雖然desc 方法能夠查看當前表的結構,可是他輸出的信息還不夠全面
2.show creat table 表名[\G];
獲得更全面的表定義信息,除了能夠看到表定義以外,還能夠看到engine(存儲引擎)和charset(字符集)等信息。(\G選項的含義是是的記錄可以豎向排列,以便更好的顯示內容較長的記錄。)

5.2 使用desc/show create table

1.顯示t1表的結構(desc t1;)
2.顯示建立表定義的表結構(show create table t1;)
3.以樹狀形式顯示錶的機構(show create table t1\G;)
######################################### cmd ###########################################
mysql> desc t1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(1)      | YES  |     | NULL    |       |
| name   | varchar(10) | YES  |     | NULL    |       |
| age    | int(2)      | YES  |     | NULL    |       |
| sex    | char(2)     | YES  |     | NULL    |       |
| course | char(10)    | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)

mysql> show create table t1;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (
  `id` int(1) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  `sex` char(2) CHARACTER SET utf8 DEFAULT NULL,
  `course` char(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table t1\G;
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(1) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  `sex` char(2) CHARACTER SET utf8 DEFAULT NULL,
  `course` char(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

ERROR:
No query specified
###################################### end ##############################################

6、修改表的結構

6.1 語法

1. 修改表名
alter table 舊錶名 rename 新表名;

2.增長表中字段
alter table 表名 add 字段名 數據類型[完整性約束條件····],add···

3.刪除表中字段
alter table 表名 drop 字段名;

4.修改表中字段
alter table 表名 MODIFY  字段名 數據類型 [完整性約束條件…];
alter table 表名 change 舊字段名 新字段名 舊數據類型 [完整性約束條件…];
alter table 表名 change 舊字段名 新字段名 新數據類型 [完整性約束條件…];

5.修改字段在表中的排列順序/在增長的時候指定位置
alter table 表名 add 字段名  數據類型 [完整性約束條件…]  frist;
alter table 表名 add 字段名  數據類型 [完整性約束條件…]  after 字段名;
alter table 表名 change  舊字段名 新字段名 新數據類型 [完整性約束條件…] frist;
alter table 表名 modify   數據類型 [完整性約束條件…]  after 字段名;

6.2 使用

1.將t1表名改成t2
alter table t1 rename t2;

2.向t2表中增長hobby字段
alter table t2 add hobby char(8);

3.刪除t2表中的hobby字段
alter table t2 drop hobby;

4.把t2表中的course字段的寬度
alter table t2 modify course char(8);

5. 把t2表中的course字段改成class
alter table t2 change course class char(20)

6.把t2表的age字段放在sex字段後
alter table t2 modify age int(2) after sex;


########################################### cmd #########################################
mysql> alter table t1 rename t2;
Query OK, 0 rows affected (1.10 sec)
mysql> alter table t2 add hobby char(8) character set 'utf8';
Query OK, 0 rows affected (0.70 sec)
mysql> alter table t2 drop hobby;
Query OK, 0 rows affected (0.56 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> alter table t2 modify course char(8);
Query OK, 5 rows affected, 5 warnings (0.97 sec)
Records: 5  Duplicates: 0  Warnings: 5
mysql> alter table t2 change course class char(20) character set 'utf8';
Query OK, 5 rows affected (0.94 sec)
Records: 5  Duplicates: 0  Warnings: 0
mysql> select * from t2;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | class |
+------+--------+------+------+-------+
|    1 | xichen |   18 | 女   | ??    |
|    2 | chen   |   19 | 女   | ??    |
|    3 | xixi   |   19 | 男   | ??    |
|    4 | haha   |   19 | 女   | ??    |
|    6 | dada   |   20 | 男   | ??    |
+------+--------+------+------+-------+
5 rows in set (0.00 sec)
mysql> alter table t2 modify age int(2) after sex;
Query OK, 0 rows affected (0.69 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(1)      | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| sex   | char(2)     | YES  |     | NULL    |       |
| age   | int(2)      | YES  |     | NULL    |       |
| class | char(20)    | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
####################################### end #############################################

7、刪除表

drop table 表名;
相關文章
相關標籤/搜索