1. 程式人生 > >SQL語法之建立和管理表

SQL語法之建立和管理表

一、建立資料庫

# 建立資料庫,選擇具體的庫
#建立資料庫
CREATE DATABASE temp;

#顯示當前使用者下的資料庫
SHOW DATABASES;

# 使用某個具體的資料庫,”使用”一個數據庫,使其作為當前資料庫
USE temp;

# 顯示當前資料庫下的所有的表
SHOW TABLES;

資料庫名命名規則:

  • 資料庫名不得超過30個字元,變數名限制為29個
  • 必須只能包含 A–Z, a–z, 0–9, _共63個字元
  • 不能在物件名的字元間留空格
  • 必須不能和使用者定義的其他物件重名
  • 必須保證你的欄位沒有和保留字、資料庫系統或常用方法衝突
  • 保持欄位名和型別的一致性,在命名欄位併為其指定資料型別的時候一定要保證一致性。假如資料型別在一個表裡是整數,那在另一個表裡就不要變成字元型了

二、CREATE TABLE 語句

1、基本介紹

CREATE TABLE [schema.]table
        (column datatype [DEFAULT expr][, ...]);

必須具備:

  • CREATE TABLE許可權
  • 儲存空間

必須指定:

  • 表名
  • 列名, 資料型別, 尺寸

2、建立表 1) 語法

CREATE TABLE dept( deptno   INT(2),
                   dname    VARCHAR(14),
                   loc  VARCHAR(13));

2)確認

#查詢表結構
DESCRIBE dept
建立表
CREATE TABLE emp (
  #int型別,自增
  emp_id INT AUTO_INCREMENT,
  #最多儲存20箇中英文字元
  emp_name CHAR (20),
  #總位數不超過15位
  salary DOUBLE,
  #日期型別
  birthday DATE,
  #主鍵
  PRIMARY KEY (emp_id)
) ;

3、常用資料型別

使用子查詢建立表 1) 使用 AS subquery 選項,將建立表和插入資料結合起來

CREATE TABLE table
      [(column
, column...)] AS subquery;

2) 指定的列和子查詢中的列要一一對應 3)通過列名和預設值定義列 4)複製現有的表:

create table emp1 as select * from employees;
create table emp2 as select * from employees where 1=2;
--建立的emp2是空表。

案例實戰:

#建立表
# 方式一:"白手起家"
CREATE TABLE emp1(
id INT,
NAME VARCHAR(15),
salary DOUBLE(10,2),
hire_date DATE
);

SELECT * FROM emp1;
DESC emp1;

# 方式二:(子查詢建立表)基於現有的表
CREATE TABLE emp3
AS
SELECT employee_id,last_name,salary
FROM employees
WHERE department_id IN (60,70,80);

#建立表的同時,還可以匯入原有表的資料
SELECT *
FROM emp3;


CREATE TABLE emp4
AS
SELECT d.department_id,d.department_name,AVG(salary),COUNT(employee_id)
FROM departments d LEFT JOIN employees e  
ON e.department_id = d.department_id
GROUP BY d.department_id,d.department_name;

SELECT * FROM emp4;

#在使用方式二建立表的同時,給表的欄位重新命名,新建立的表的欄位名即為欄位重新命名的名。
CREATE TABLE emp5
AS
SELECT employee_id emp_id,last_name emp_name
FROM employees;

SELECT emp_id
FROM emp5;

#例子1:複製一個employees表,包括資料
CREATE TABLE employees_copy
AS
SELECT *
FROM employees;

#如上的方式複製,能將原表中的資料複製過來,同時新表的欄位名和資料型別也與原表相同。
#但是,原表的約束是不能同步複製過來的。(除 not null)

SELECT *
FROM employees_copy;

DESC employees;
DESC employees_copy;

#例子2:複製一個employees表,不包括資料
CREATE TABLE employees_blank
AS
SELECT *
FROM employees
WHERE 1=2;

SELECT *
FROM employees_blank;

三、ALTER TABLE 語句

1、基本介紹 使用 ALTER TABLE 語句可以實現: - 向已有的表中新增列 - 修改現有表中的列 - 刪除現有表中的列 - 重新命名現有表中的列

2、追加一個新列

ALTER TABLE dept80 
ADD job_id varchar(15);

3、修改一個列

  • 可以修改列的資料型別, 尺寸和預設值
  • 對預設值的修改隻影響今後對錶的修改
ALTER TABLE dept80
MODIFY      (last_name VARCHAR(30));
Table altered.

ALTER TABLE dept80
MODIFY      (salary double(9,2) default 1000);
Table altered.

4、重新命名一個列 使用 CHANGE old_column new_column dataType子句重新命名列

ALTER TABLE  dept80
CHANGE department_name dept_name varchar(15); 
Table altered.

5、刪除一個列 使用 DROP COLUMN 子句刪除不再需要的列.

ALTER TABLE  dept80
DROP COLUMN  job_id; 
Table altered.

6、改變物件的名稱(重命名錶)

  • 執行RENAME語句改變表, 檢視的名稱
  • 必須是物件的擁有者
ALTER table dept
RENAME TO detail_dept;
Table renamed.

實戰練習:

#修改表 alter table
DESC emp2;
# 新增一個列
ALTER TABLE emp2
ADD email VARCHAR(25);

SELECT *
FROM emp2;

#  刪除一個列
ALTER TABLE emp2
DROP COLUMN email;

#  修改現有的列
# 可以修改列的儲存範圍、資料型別(通常不會改資料型別)
ALTER TABLE emp2
MODIFY salary DOUBLE(15,2);

DESC emp2;
#如果存在資料了,通常不會修改欄位的資料型別
ALTER TABLE emp2
MODIFY last_name DOUBLE(10,2); 

ALTER TABLE emp2
MODIFY salary VARCHAR(25);#變數型別的自動轉換。 2300.50 -> '2300.50'

#  重新命名列 (oracle : alter emp2 rename column last_name to emp_name)
DESC emp2;

ALTER TABLE emp2
CHANGE last_name emp_name VARCHAR(20);

# 重命名錶 (oracle : rename emp2 to myemp2)
ALTER TABLE emp2
RENAME TO myemp2;

DESC emp2;#Table 'myemployees.emp2' doesn't exist
DESC myemp2;

四、刪除表

DROP TABLE dept80;
Table dropped.

1、 資料和結構都被刪除 2、所有正在執行的相關事務被提交 3、所有相關索引被刪除 4、 DROP TABLE 語句不能回滾

#刪除表
DROP TABLE myemp2;
DESC myemp2; #Table 'myemployees.myemp2' doesn't exist

五、清空表

TRUNCATE TABLE detail_dept;
Table truncated.

1、RUNCATE TABLE 語句:

  • 刪除表中所有的資料
  • 釋放表的儲存空間

2、 TRUNCATE語句不能回滾 3、可以使用 DELETE 語句刪除資料,可以回滾