<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 編程學習 >> 數據庫語言 >> 正文

      數據庫知識點匯總(最全!!)_數據庫知識點總結歸納

      作者:佚名    文章來源:網絡整理    點擊數:    更新時間:2024/8/31

      數據庫的概念
      DB
      數據庫(database):存儲數據的“倉庫”。它保存了一系列有組織的數據。
      DBMS
      數據庫管理系統(Database Management System)。數據庫是通過DBMS創建和操作的容器,常見的數據庫管理系統:MySQL、Oracle、DB2、SqlServer等
      SQL
      結構化查詢語言(Structure Query Language):專門用來與數據庫通信的語言。
      二、SQL語言概述
      SQL的優點:
      1、不是某個特定數據庫供應商專有的語言,幾乎所有DBMS都支持SQL
      2、簡單易學
      3、雖然簡單,但實際上是一種強有力的語言,靈活使用其語言元素,可以進行非常復雜和高級的數據庫操作。
      三、數據庫的特點
      將數據放到表中,表再放到庫中
      一個數據庫中可以有多個表,每個表都有一個的名字,用來標識自己。表名具有唯一性。
      表具有一些特性,這些特性定義了數據在表中如何存儲,類似java中 “類”的設計。
      表由列組成,我們也稱為字段。所有表都是由一個或多個列組成的,每一列類似java 中的”屬性”
      表中的數據是按行存儲的,每一行類似于java中的“對象”。
      四、SQL語言分類
      1、DML(Data Manipulation Language):數據操縱語句,用于添加、刪除、修改、查詢數據庫記錄,并檢查數據完整性
      2、DDL(Data Definition Language):數據定義語句,用于庫和表的創建、修改、刪除。
      3、DCL(Data Control Language):數據控制語句,用于定義用戶的訪問權限和安全級別。
      DML
      DML用于查詢與修改數據記錄,包括如下SQL語句:
      INSERT:添加數據到數據庫中
      UPDATE:修改數據庫中的數據
      DELETE:刪除數據庫中的數據
      SELECT:選擇(查詢)數據
      SELECT是SQL語言的基礎,最為重要。
      DDL
      DDL用于定義數據庫的結構,比如創建、修改或刪除數據庫對象,包括如下SQL語句:
      CREATE TABLE:創建數據庫表
      ALTER TABLE:更改表結構、添加、刪除、修改列長度
      DROP TABLE:刪除表
      CREATE INDEX:在表上建立索引
      DROP INDEX:刪除索引
      DCL
      DCL用來控制數據庫的訪問,包括如下SQL語句:
      GRANT:授予訪問權限
      REVOKE:撤銷訪問權限
      COMMIT:提交事務處理
      ROLLBACK:事務處理回退
      SAVEPOINT:設置保存點
      LOCK:對數據庫的特定部分進行鎖定
      五、mysql數據庫的安裝
      圖解MySQL程序結構

      MySQL產品的特點
      MySQL數據庫隸屬于MySQL AB公司,總部位于瑞典,后被oracle收購。
      – 成本低:開放源代碼,一般可以免費試用
      – 性能高:執行很快
      – 簡單:很容易安裝和使用
      配置文件常用配置分析(重點)
      安裝目錄下的my.ini文件
      [mysqld] 服務端配置
      port=3306 端口3306
      basedir 是安裝目錄
      datadir 數據文件目錄
      character-set-server 服務端字符編碼
      default-storage-engine 默認引擎
      sql-mode 語法模式
      max_connections 最大連接數
      啟動和停止MySQL服務
      方式一:通過計算機管理方式
      右擊計算機—管理—服務—啟動或停止MySQL服務
      方式二:通過命令行方式(右鍵管理員運行,否則沒有權限)
      啟動:net start 服務名
      停止:net stop 服務名
      MySQL服務端的登錄和退出
      通過mysql自帶客戶端

      通過window是命令行登錄
      mysql –h 主機名 –u用戶名 –p 密碼
      mysql -h localhost -u root -p
      輸入密碼:
      退出
      exit
      六、MySql數據庫的使用
      規范
      不區分大小寫
      每句話用;或\g結尾
      各子句一般分行寫
      關鍵字不能縮寫也不能分行
      用縮進提高語句的可讀性
      注釋
      單行注釋 # 或 –
      多行注釋 /* 注釋文本 */

      示例

      1. 進入 mysql, 在命令行中輸入: mysql –u root –p
      2. 查看 mysql 中有哪些個數據庫: show databases;
      3. 使用一個數據庫: use 數據庫名稱;
      4. 新建一個數據庫: create database 數據庫名
      5. 查看指定的數據庫中有哪些數據表: show tables;
        6.查看mysql版本
        登錄后select version();
        或退出重新登錄
        未登錄 mysql --version或mysql –V

      1.SHOW DATABASES;
      2.USE employee;
      3.SHOW TABLES ;
      4.DESC dept;
      七、圖形化界面客戶端的使用

      導入sql文件
      四張表的介紹

      八、基本 SELECT 語句
      SELECT *|{[DISTINCT] column|expression [alias],…}
      FROM table;
      • SELECT 標識選擇哪些列。
      • FROM 標識從哪個表中選擇。
      SELECT *
      FROM departments;
      選擇特定的列
      SELECT department_id, location_id
      FROM departments;

      注意
      • SQL 語言大小寫不敏感。
      • SQL 可以寫在一行或者多行
      • 關鍵字不能被縮寫也不能分行
      • 各子句一般要分行寫。
      • 使用縮進提高語句的可讀性
      列的別名
      • 重命名一個列。
      • 便于計算。
      • 緊跟列名,也可以在列名和別名之間加入關鍵字‘AS’,別名使用雙引號,以便在別名中包含空格或特殊的字符并區分大小寫。
      SELECT last_name AS name, commission_pct comm
      FROM employees;
      SELECT last_name “Name”, salary*12 “Annual Salary”
      FROM employees;

      字符串
      • 字符串可以是 SELECT 列表中的一個字符,數字,日期。
      • 日期和字符只能在單引號中出現。?
      顯示表結構
      使用 DESCRIBE 命令,表示表結構
      DESC[RIBE] tablename
      DESCRIBE employees
      九、過濾和排序數據
      過濾
      使用WHERE 子句,將不滿足條件的行過濾掉
      SELECT
      *|{[DISTINCT] column|expression [alias],…}
      FROM table
      [WHERE condition(s)];
      WHERE 子句緊隨 FROM 子句

      返回在 90號部門工作的所有員工的信息
      SELECT employee_id, last_name, job_id, department_id
      FROM employees
      WHERE department_id = 90 ;
      比較運算
      賦值使用 := 符號

      SELECT last_name, salary
      FROM employees
      WHERE salary <= 3000;
      其它比較運算(重點聽一下LIKE)

      BETWEEN
      使用 BETWEEN 運算來顯示在一個區間內的值
      SELECT last_name, salary
      FROM employees
      WHERE salary BETWEEN 2500 AND 3500;
      IN
      使用 IN運算顯示列表中的值。
      SELECT employee_id, last_name, salary, manager_id
      FROM employees
      WHERE manager_id IN (100, 101, 201);
      LIKE
      •使用 LIKE 運算選擇類似的值
      •選擇條件可以包含字符或數字:
      % 代表零個或多個字符(任意個字符)。
      _ 代表一個字符。
      SELECT first_name
      FROM employees
      WHERE first_name LIKE ‘S%’;

      ‘%’和‘-’可以同時使用
      SELECT last_name
      FROM employees
      WHERE last_name LIKE ‘_o%’; //最后的名字字母為o
      NULL
      使用 IS (NOT) NULL 判斷空值
      SELECT last_name, manager_id
      FROM employees
      WHERE manager_id IS NULL;
      邏輯運算

      AND
      AND 要求并的關系為真

      SELECT employee_id, last_name, job_id, salary
      FROM employees
      WHERE salary >=10000
      AND job_id LIKE ‘%MAN%’;
      OR
      OR 要求或關系為真。
      SELECT employee_id, last_name, job_id, salary
      FROM employees
      WHERE salary >= 10000
      OR job_id LIKE ‘%MAN%’;
      NOT
      SELECT last_name, job_id
      FROM employees
      WHERE job_id
      NOT IN (‘IT_PROG’, ‘ST_CLERK’, ‘SA_REP’);
      ORDER BY子句
      使用 ORDER BY 子句排序
      ASC(ascend): 升序
      DESC(descend): 降序
      ORDER BY 子句在SELECT語句的結尾。
      SELECT last_name, job_id, department_id, hire_date
      FROM employees
      ORDER BY hire_date ;
      降序排序
      SELECT last_name, job_id, department_id, hire_date
      FROM employees
      ORDER BY hire_date DESC ;
      按別名排序
      SELECT employee_id, last_name, salary*12 annsal
      FROM employees
      ORDER BY annsal;
      多個列排序
      按照ORDER BY 列表的順序排序
      SELECT last_name, department_id, salary
      FROM employees
      ORDER BY department_id, salary DESC;
      可以使用不在SELECT 列表中的列排序
      十、分組函數
      什么是分組函數
      分組函數作用于一組數據,并對一組數據返回一個值。
      組函數類型

      • AVG()
      • COUNT()
      • MAX()
      • MIN()
      • SUM()
      組函數語法
      SELECT [column,] group_function(column), …
      FROM table
      [WHERE condition]
      [GROUP BY column]
      [ORDER BY column];
      AVG(平均值)和 SUM (合計)函數
      可以對數值型數據使用AVG 和 SUM 函數。
      SELECT AVG(salary), MAX(salary),
      MIN(salary), SUM(salary)
      FROM employees
      WHERE job_id LIKE ‘%REP%’;
      MIN(最小值)和 MAX(最大值)函數
      可以對任意數據類型的數據使用 MIN 和 MAX 函數。
      SELECT MIN(hire_date), MAX(hire_date)
      FROM employees;
      COUNT(計數)函數
      COUNT() 返回表中記錄總數,適用于任意數據類型。
      SELECT COUNT(
      )
      FROM
      employees
      WHERE department_id = 50;

      COUNT(expr) 返回expr不為空的記錄總數
      SELECT COUNT(commission_pct)
      FROM employees
      WHERE department_id = 50;
      分組數據
      分組數據: GROUP BY 子句語法
      可以使用GROUP BY子句將表中的數據分成若干組
      SELECT column, group_function(column)
      FROM table
      [WHERE condition]
      [GROUP BY group_by_expression]
      [ORDER BY column];
      GROUP BY 子句 (?)
      在SELECT 列表中所有未包含在組函數中的列都應該包含在 GROUP BY 子句中
      SELECT department_id, AVG(salary)
      FROM employees
      GROUP BY department_id ;
      包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
      SELECT AVG(salary)
      FROM employees
      GROUP BY department_id ;
      使用多個列分組
      SELECT department_id dept_id, job_id, SUM(salary)
      FROM employees
      GROUP BY department_id, job_id ;
      非法使用組函數
      • 不能在 WHERE 子句中使用組函數。
      • 可以在 HAVING 子句中使用組函數
      SELECT department_id, AVG(salary)
      FROM employees
      WHERE AVG(salary) > 8000
      GROUP BY department_id;

      WHERE 子句中不能使用組函數
      過濾分組
      使用 HAVING 過濾分組:

      1. 行已經被分組。
      2. 使用了組函數。
      3. 滿足HAVING 子句中條件的分組將被顯示。
        SELECT column, group_function
        FROM table
        [WHERE condition]
        [GROUP BY group_by_expression]
        [HAVING group_condition]
        [ORDER BY column];

      HAVING 子句
      SELECT department_id, MAX(salary)
      FROM employees
      GROUP BY department_id
      HAVING MAX(salary)>10000 ;
      十一、多表查詢

      笛卡爾集

      select name,boyName from beauty,boys; 這條語句對嗎?
      為了避免笛卡爾集, 可以在 WHERE 加入有 效的連接條件

      Mysql 連接
      使用連接在多個表中查詢數據
      SELECT table1.column, table2.column
      FROM table1, table2
      WHERE table1.column1 = table2.column2;
      在 WHERE 子句中寫入連接條件。
      在表中有相同列時,在列名之前加上表名前綴
      等值連接

      SELECT beauty.id,NAME,boyname FROM beauty ,boys
      WHERE beauty.boyfriend_id=boys.id;
      區分重復的列名
      • 使用表名前綴在多個表中區分相同的列。
      • 在不同表中具有相同列名的列可以用表的別名加以區分。
      • 如果使用了表別名,則在select語句中需要使用表別名代替表名
      • 表別名最多支持32個字符長度,但建議越少越好
      表的別名
      • 使用別名可以簡化查詢。
      • 使用表名前綴可以提高執行效率。
      SELECT bt.id,NAME,boyname
      FROM beauty bt,boys b;
      WHERE bt.boyfriend_id=b.id ;
      Join連接
      • 分類:
      – 內連接 [inner] join on
      – 外連接
      • 左外連接 left [outer] join on
      • 右外連接 right [outer] join on
      ON 子句
      SELECT bt.id,NAME,boyname
      FROM beauty bt
      Inner join boys b
      On bt.boyfriend_id=b.id ;
      連接多個表
      連接 n個表,至少需要 n-1個連接條件。
      例如:連接三個表,至少需要兩個連接條件。
      練習:查詢出公司員工的 last_name, department_name, city
      使用 ON 子句創建多表連接(重點)
      SELECT employee_id, city, department_name
      FROM employees e
      JOIN departments d
      ON d.department_id = e.department_id
      JOIN locations l
      ON d.location_id = l.location_id;
      John連接總結

      十二、字符函數

      大小寫控制函數
      這類函數改變字符的大小寫。
      LOWER(‘SQL Course’)
      sql course

      UPPER(‘SQL Course’)
      SQL COURSE

      字符控制函數
      CONCAT(‘Hello’, ‘World’)
      HelloWorld

      SUBSTR(‘HelloWorld’,1,5)
      Hello

      LENGTH(‘HelloWorld’)
      10

      INSTR(‘HelloWorld’, ‘W’)
      6

      LPAD(salary,10,’*’)
      *****24000

      RPAD(salary, 10, ‘*’)
      24000*****

      TRIM(‘H’ FROM ‘HelloWorld’)
      elloWorld

      REPLACE(‘abcd’,‘b’,‘m’)
      amcd
      十三、數字函數
      ROUND: 四舍五入
      ROUND(45.926, 2) 45.93
      TRUNCATE: 截斷
      TRUNC(45.926, 2) 45.92
      MOD: 求余
      MOD(1600, 300) 100
      十四、日期函數
      now:獲取當前日期
      str_to_date: 將日期格式的字符轉換成指定格式的日期
      STR_TO_DATE(‘9-13-1999’,’%m-%d-%Y’) 1999-09-13
      date_format:將日期轉換成字符
      str_to_date: 將日期格式的字符轉換成指定格式的日期 2018年06月06日

      十五、條件表達式
      • 在 SQL 語句中使用IF-THEN-ELSE 邏輯
      • 使用方法: – CASE 表達式
      CASE 表達式
      在需要使用 IF-THEN-ELSE 邏輯時
      CASE expr WHEN comparison_expr1 THEN return_expr1
      [WHEN comparison_expr2 THEN return_expr2
      WHEN comparison_exprn THEN return_exprn
      ELSE else_expr]
      END
      練習:查詢部門號為 10, 20, 30 的員工信息, 若部門號為 10, 則打印其工資的 1.1 倍, 20 號部門, 則打印其工資的 1.2 倍, 30 號部門打印其工資的 1.3 倍數
      下面是使用case表達式的一個例子:
      SELECT department_id,salary,
      CASE department_id
      WHEN 10 THEN salary1.2
      WHEN 20 THEN salary
      1.3
      WHEN 30 THEN salary*1.5
      ELSE salary
      END 工資2
      FROM employees
      十六、數據操縱語言
      DML(Data Manipulation Language –數據操縱語言) 可以在下列條件下執行: – 向表中插入數據
      – 修改現存數據
      – 刪除現存數據
      事務是由完成若干項工作的DML語句組成的
      十七、插入數據
      INSERT 語句語法
      使用 INSERT 語句向表中插入數據。
      INSERT INTO table [(column [, column…])]
      VALUES (value [, value…]);
      使用這種語法一次只能向表中插入一條數據
      插入數據
      為每一列添加一個新值。
      • 按列的默認順序列出各個列的值。
      • 在 INSERT 子句中隨意列出列名和他們的值。
      • 字符和日期型數據應包含在單引號中。
      INSERT INTO departments(department_id, department_name,
      manager_id, location_id)
      VALUES (70, ‘Public Relations’, 100, 1700);

      INSERT INTO
      employees(employee_id,last_name,email,hire_date,job_id)
      VALUES (300,’Tom’,’tom@126.com’,to_date(‘2012-3-
      21’,’yyyy-mm-dd’),’SA_RAP’);

      向表中插入空值
      隱式方式: 在列名表中省略該列的值
      INSERT INTO departments (department_id, department_name )
      VALUES (30, ‘Purchasing’);

      顯示方式: 在VALUES 子句中指定空值。
      INSERT INTO departments
      VALUES (100, ‘Finance’, NULL, NULL);
      插入指定的值
      NOW()函數:記錄當前系統的日期和時間
      INSERT INTO employees (employee_id, first_name, last_name, email, phone_number,hire_date, job_id, salary, commission_pct, manager_id,department_id)
      VALUES (113, ‘Louis’, ‘Popp’, ‘LPOPP’, ‘515.124.4567’, NOW(), ‘AC_ACCOUNT’, 6900, NULL, 205, 100);

      從其它表中拷貝數據
      在 INSERT 語句中加入子查詢
      INSERT INTO emp2
      SELECT *
      FROM employees
      WHERE department_id = 90;

      INSERT INTO sales_reps(id, name, salary, commission_pct)
      SELECT employee_id, last_name, salary, commission_pct
      FROM employees
      WHERE job_id LIKE ‘%REP%’;

      不必書寫 VALUES 子句。
      子查詢中的值列表應與 INSERT 子句中的列名對應
      十八、更新數據
      UPDATE 語句語法
      • 使用 UPDATE 語句更新數據
      UPDATE table
      SET column = value [, column = value, …]
      [WHERE condition];

      • 可以一次更新多條數據。
      • 如果需要回滾數據,需要保證在DML前,進行設置:SET AUTOCOMMIT = FALSE;
      • 使用 WHERE 子句指定需要更新的數據
      UPDATE employees
      SET department_id = 70
      WHERE employee_id = 113;
      • 如果省略 WHERE 子句,則表中的所有數據都將被更新
      UPDATE copy_emp
      SET department_id = 110;

      更新中的數據完整性錯誤
      UPDATE employees
      SET department_id = 55
      WHERE department_id = 110;

      十九、刪除數據
      DELETE 語句
      使用 DELETE 語句從表中刪除數據。
      DELETE FROM table
      [WHERE condition];
      刪除數據
      使用 WHERE 子句刪除指定的記錄
      DELETE FROM departments
      WHERE department_name = ‘Finance’;
      如果省略 WHERE 子句,則表中的全部數據將被刪除
      DELETE FROM copy_emp;
      刪除中的數據完整性錯誤
      DELETE FROM departments
      WHERE department_id = 60;

      二十、子查詢
      概念
      出現在其他語句內部的select語句,稱為子查詢或內查詢,內部嵌套其他select語句的查詢,稱為外查詢或主查詢
      示例:
      select first_name from employees where
      department_id in(
      select department_id from departments
      where location_id=1700
      )
      注意事項
      • 子查詢要包含在括號內。
      • 將子查詢放在比較條件的右側。
      • 單行操作符對應單行子查詢,多行操作符對應多行子查詢
      單行子查詢
      • 只返回一行。
      • 使用單行比較操作符。

      子查詢語法
      SELECT select_list
      FROM table
      WHERE expr operator
      (SELECT select_list
      FROM table);

      • 子查詢 (內查詢) 在主查詢之前一次執行完成。
      • 子查詢的結果被主查詢(外查詢)使用 。
      使用子查詢解決問題
      誰的工資比 Abel 高?

      執行單行子查詢
      題目:返回job_id與141號員工相同,salary比143號員工多的員工姓名,job_id 和工資
      在子查詢中使用組函數
      題目:返回公司工資最少的員工的last_name,job_id和salary
      子查詢中的 HAVING 子句
      • 首先執行子查詢。
      • 向主查詢中的HAVING 子句返回結果。
      題目:查詢最低工資大于50號部門最低工資的部門id和其最低工資
      非法使用子查詢

      子查詢中的空值問題
      SELECT last_name, job_id
      FROM employees
      WHERE job_id =
      (SELECT job_id
      FROM employees
      WHERE last_name = ‘Haas’);
      子查詢不返回任何行
      多行子查詢
      • 返回多行。
      • 使用多行比較操作符

      使用in操作符
      題目:返回location_id是1400或1700的部門中的所有員工姓名
      在多行子查詢中使用 ANY 操作符
      題目:返回其它部門中比job_id為‘IT_PROG’部門任一工資低的員工的員
      工號、姓名、job_id 以及salary

      題目:返回其它部門中比job_id為‘IT_PROG’部門所有工資都低的員工
      的員工號、姓名、job_id 以及salary

      子查詢中的空值問題

      二十一、創建數據庫
      創建一個保存員工信息的數據庫
      – create database employees;
      相關其他命令
      – show databases;查看當前所有數據庫
      – use employees;“使用”一個數據庫,使其作為當前數據庫
      命名規則
      • 數據庫名不得超過30個字符,變量名限制為29個 • 必須只能包含 A–Z, a–z, 0–9, _共63個字符
      • 不能在對象名的字符間留空格
      • 必須不能和用戶定義的其他對象重名
      • 必須保證你的字段沒有和保留字、數據庫系統或常用方法沖突
      • 保持字段名和類型的一致性,在命名字段并為其指定數據類型的時候一定要保證一致性。假如數據類型在一個表里是整數,那在另一個表里可就別變成字符型了
      CREATE TABLE 語句
      • 必須具備:
      – CREATE TABLE權限
      – 存儲空間

      • 必須指定:
      – 表名
      – 列名, 數據類型, 尺寸
      語法

      確認

      常用數據類型

      創建表
      CREATE TABLE emp (
      #int類型,自增
      emp_id INT AUTO_INCREMENT, #最多保存20個中英文字符
      emp_name CHAR (20),
      #總位數不超過15位
      salary DOUBLE,
      #日期類型
      birthday DATE,
      #主鍵
      PRIMARY KEY (emp_id)
      ) ;
      使用子查詢創建表
      • 使用 AS subquery 選項,將創建表和插入數據結合起來(?)

      • 指定的列和子查詢中的列要一一對應
      • 通過列名和默認值定義列
      復制現有的表:
      create table emp1 as select * from employees;
      create table emp2 as select * from employees where 1=2;
      –創建的emp2是空表。
      使用子查詢創建表舉例

      二十二、ALTER TABLE 語句
      使用 ALTER TABLE 語句可以實現:
      –向已有的表中添加列
      修改現有表中的列
      –刪除現有表中的列
      –重命名現有表中的列
      追加一個新列
      ALTER TABLE dept80
      ADD job_id varchar(15);
      修改一個列
      • 可以修改列的數據類型, 尺寸和默認值
      • 對默認值的修改只影響今后對表的修改
      ALTER TABLE dept80
      MODIFY (last_name VARCHAR(30));

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

      刪除一個列
      使用 DROP COLUMN 子句刪除不再需要的列.
      ALTER TABLE dept80
      DROP COLUMN job_id;
      重命名一個列
      使用 CHANGE old_column new_column dataType子句重命名列
      ALTER TABLE dept80
      CHANGE department_name dept_name varchar(15);
      二十三、刪除表
      • 數據和結構都被刪除
      • 所有正在運行的相關事務被提交
      • 所有相關索引被刪除
      • DROP TABLE 語句不能回滾
      DROP TABLE dept80;

      清空表
      • TRUNCATE TABLE 語句:
      – 刪除表中所有的數據
      – 釋放表的存儲空間
      • TRUNCATE語句不能回滾
      • 可以使用 DELETE 語句刪除數據,可以回滾
      二十四、改變對象的名稱
      • 執行RENAME語句改變表, 視圖的名稱
      • 必須是對象的擁有者
      ALTER table dept
      RENAME TO detail_dept;
      二十五、常見的數據類型
      整型

      小數

      位類型

      char和varchar類型
      字符串類型 最多字符數 描述及存儲需求
      說明:用來保存MySQL中較短的字符串。

      binary和varbinary類型
      說明:類似于char和varchar,不同的是它們包含二進制字符串而不包含非二進制字符串。
      Enum類型
      說明:又稱為枚舉類型哦,要求插入的值必須屬于列表中指定的值之一。
      如果列表成員為1~255,則需要1個字節存儲
      如果列表成員為255~65535,則需要2個字節存儲
      最多需要65535個成員
      Set類型
      說明:和Enum類型類似,里面可以保存0~64個成員。和Enum類型最大的區別是:SET類型一次可以選取多個成員,而Enum只能選一個根據成員個數不同,存儲所占的字節也不同

      日期類型

      datetime和timestamp的區別
      1、Timestamp支持的時間范圍較小,取值范圍:19700101080001——2038年的某個時間Datetime的取值范圍:1000-1-1 ——9999—12-31
      2、timestamp和實際時區有關,更能反映實際的日期,而datetime則只能反映出插入時的當地時區
      3、timestamp的屬性受Mysql版本和SQLMode的影響很大
      二十六、約束
      什么是約束
      • 為了保證數據的一致性和完整性,SQL規范以約束的方式對表數據進行額外的條件限制。
      • 約束是表級的強制規定
      • 可以在創建表時規定約束(通過 CREATETABLE 語句),或者在表創建之后也可以(通
      過 ALTER TABLE 語句)
      有以下六種約束:
      – NOT NULL 非空約束,規定某個字段不能為空
      – UNIQUE 唯一約束,規定某個字段在整個表中是唯一的
      – PRIMARY KEY 主鍵(非空且唯一) – FOREIGN KEY 外鍵
      – CHECK 檢查約束
      – DEFAULT 默認值
      具體細節可以參閱W3Cschool手冊
      注意: MySQL不支持check約束,但可以使用check約束,而沒有任何效果;
      • 根據約束數據列的限制,約束可分為:
      – 單列約束:每個約束只約束一列
      – 多列約束:每個約束可約束多列數據
      • 根據約束的作用范圍,約束可分為:
      – 列級約束只能作用在一個列上,跟在列的定義后面
      – 表級約束可以作用在多個列上,不與列一起,而是單獨定義
      NOT NULL 約束
      非空約束用于確保當前列的值不為空值,非空約束只能出現在表對象的列上。
      Null類型特征:
      所有的類型的值都可以是null,包括int、float等數據類型
      空字符串””不等于null,0也不等于null
      創建 not null 約束:
      CREATE TABLE emp(
      id INT(10) NOT NULL,
      NAME VARCHAR(20) NOT NULL DEFAULT ‘abc’,
      sex CHAR NULL
      );
      增加 not null 約束
      ALTER TABLE emp
      MODIFY sex VARCHAR(30) NOT NULL;
      取消 not null 約束:
      ALTER TABLE emp
      MODIFY sex VARCHAR(30) NULL;

      取消 not null 約束,增加默認值:
      ALTER TABLE emp
      MODIFY NAME VARCHAR(15) DEFAULT ‘abc’ NULL;
      UNIQUE 約束
      • 同一個表可以有多個唯一約束,多個列組合的約束。在創建唯一約束的時候,如果不給唯一約束名稱,就默認和列名相同。
      • MySQL會給唯一約束的列上默認創建一個唯一索引
      • 唯一約束,允許出現多個空值:NULL。
      CREATE TABLE USER(
      id INT NOT NULL,
      NAME VARCHAR(25),
      PASSWORD VARCHAR(16),
      #使用表級約束語法
      CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
      );

      Tags:數據庫,mysql,sql  
      責任編輯:admin
      請文明參與討論,禁止漫罵攻擊。 昵稱:注冊  登錄
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 久久婷婷五月综合色国产香蕉| 青青青伊人色综合久久| 色综合视频一区二区三区| 亚洲国产成人久久综合一区| 久久亚洲精品成人综合| 亚洲综合婷婷久久| 亚洲精品综合在线影院| 伊人久久亚洲综合影院首页| 亚洲第一综合天堂另类专| 六月婷婷综合激情| 午夜激情影院综合| 一本色道久久综合亚洲精品 | 亚洲精品第一国产综合境外资源| 久久综合久综合久久鬼色| 99久久国产综合精品2020| 亚洲av日韩综合一区二区三区| 噜噜综合亚洲AV中文无码| 国产精品无码久久综合| 小说区综合区首页| 亚洲狠狠婷婷综合久久久久| 亚洲av永久中文无码精品综合| 伊人网综合在线视频| 亚洲AV日韩综合一区| 国产婷婷色综合AV蜜臀AV| 色婷婷五月综合欧美图片| 狠狠色噜噜狠狠狠狠色综合久AV| 天天综合天天综合| 亚洲中文字幕无码久久综合网 | 色视频综合无码一区二区三区| 一本一道久久综合狠狠老| 国产成人综合色视频精品| 国产综合色在线精品| 亚洲国产成人久久综合区| 亚洲精品综合在线影院| 久久综合狠狠综合久久| 97久久婷婷五月综合色d啪蜜芽 | 狠狠夜色午夜久久综合热91| 久久久久国产综合AV天堂| 中文字幕色综合久久| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 丁香色欲久久久久久综合网|