mysql表的查詢及表操做

mysql爲結構化查詢語言
數據庫設計的範式:減小數據冗餘或儘可能消除冗餘的小active 規範
設計數據庫:normal form 範式 維基百科上
約束:
       主鍵 primary key 定義字段主鍵,不容許重複,惟一性,只能有一個,不能爲空
       外鍵 foreign key 定義表與表之間的 一個表中的字段在另外一表中必須出現--->引用完整性
       惟一鍵:unique key 表中的某一字段不相同或爲空
       檢查性:否字段定義範圍,目前mysql不支持
       候選鍵,key
sql語句類型:
       DDL:數據的定義語言
       DML:數據的操做語言
       MCL:數據庫控制語言
 
字段類型:INT 整型 1字節 BIGINT 8字節 TINYINT MEDIUMINT  UNSIGNED
       FLOAT 浮點型
       BIT
       DOUBLE 單精度
       CHAR (10) 字符型 固定每一個字段就是10這麼長 0-255
       VARCHAR (10) 靈活性 長度與實際相符
       BLOB 二進制存儲數據 使用與長篇 TUNYBLOB
       TEXT MEDIUMTEXT LONGTEXT
       TIME 時間  3字節
       DATE 日期  3字節
       YEAR
       DATETIME 時間日期  TIMESTAMP 佔得空間小
              yy-mm-dd hh:mm
       ENUM 65535中組合,SET 最多64組合 枚舉類型
       boolean type 布爾類型
 
mysqld 是一個運行在服務端的進程,mysql是一個調用mysqld運行在客戶端的命令行工具
 
客戶端命令行:mysql >
            建立表:       create table 表名 (字段名 類型)
                     create table books ( id INTname VARCHAR(255));
                     DESCRIBE books 查看錶信息
                     CREATE TABLE IF NOT EXISTS books ( name VARCHAR(20) ); 保存在依然能夠建立 會有警告
                         CREATE TABLE books2 SELECT * from course WHERE id < 100 從另外表中建立 至關於複製 只會複製數據
                     CREATE TABLE books3 LIKE books 建立books3books格式同樣 數據和屬性都同樣
       額外的表命令:          
                     COMMENT 顯示註釋信息
                          CREATE TABLE IF NOT EXISTS books ( name VARCHAR(20) ) COMMENT 'books info';
                     DELAY_KEY_WRITE 加速
       表數據的插入:    insert into books values('01','xin');
                     insert into books values('01','xin'),('02','jing'); 批量插入
                     insert into books(name) values('long'),('jing') 單獨爲某一個字段插入數據
                     insert into books2 SELECT * FROM books    查詢已有表插入數據
                     insert into books set name='hua'    set插入數據
              查看:  select * from books
                     數據能夠重複 要數據惟一性能夠:
                     ALTER TABLE books ADD UNIQUE KEY (name)books表中name不容許重複
                     REPLACE insert into books(name) values('long') 至關於將內容覆蓋從新寫 能夠實現修改某一個字段
       表數據的修改:    UPDATE books SET name=wei WHERE name=hua
                     UPDATE books SET id=id+1  ORDER BY id LIMIT 3  排序並限定前3行加1
       表數據的刪除:    DELETE FROM books WHERE name=hua;刪除books表中namehua
sql語句的使用:
       表:關係描述
       修改表中已有的字段 ALTER TABLE 表名 CHANGE 老字段 新字段 字段類型;
                          ALTER TABLE books CHANGE id id INT UNSIGNED;
                          ALTER TABLE books CHANGE id id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT數字自動加;
       新增字段: ALTER TABLE books ADD intime DATETIME NOT NULL DEFAULT ' 2011-02-11 '; 增長入庫時間intime
                 ALTER TABLE books ADD pubtime DATETIME NOT NULL AFTER|FIRST name; 新曾一行到固定位置
       刪除字段: ALTER TABLE books intime
       刪除表:   DROP TABLE books
       清空表:   TRUNCATE TABLE books
       修改表名字:1 ALTER TABLE books RENAME books2
                  2RENAME TABLE books2 TO books 
       查看錶信息: DESC TABLES
       查看錶建立的過程:SHOW CREATE TABLE books
      
       查詢:支持正則表達式 邏輯表達式 &&(and)  ||(or)  異或
                     SELECT 字段 AS 別名 FROM 表名  select name as BOOKS from books 重命名字段名並查詢
                     SELECT DISTINCT startime FROM course;數據重複時只顯示一行
              範圍內查詢:
                     select * from course where id>1 and id<5 
                     select * from course where id between 1 and 4 大於等於1小於等於4
                     select * from course where id in (1,2,4)   id1 2 4
              like查詢:
                     select * from course where course LIKE 'ha%' ha開頭的數據
                     select * from course where course LIKE 'Li_rh033'
                     select * from course where
              排序查詢:   
                     SELECT DISTINCT startime FROM course ORDEY BY startime 排序相同的顯示一條記錄
                     SELECT DISTINCT startime FROM course ORDEY BY startime DESC 降序排列
                     SELECT * FROM course GROUP BY startime  startime分組
                     SELECT  startime FROM course GROUP BY startime
                     SELECT  startime FROM course GROUP BY startime HAVING COUNT(*)>1; 對分完組再進行限制輸出
                                                 HAVING COUNT 要與GROUP BY 連用
                     聚合函數:HAVING COUNT
              函數查詢:   
                     SELECT COUNT(*) FROM course 總的數據行數
                     SELECT MAX(id) FROM course  id最大的  MIN 最小  AVG 平均
              限制查詢:
                     select * from course limit 2 顯示前兩行數據;
                     select * from course order by id desc limit 2 後兩行
                     select * from course order by id limit 2; 排序限制
                     select * from course order by id limit 2,2; 從第2行開始顯示後兩行
                    
                    
多表查詢:
              sru 數據 name    age      sex      course     course 數據 id  course    statime
                         sara    20      f                           1    rh033    2011-08-08
                         terra   20      m                           2    rh253 2011-05-08
                         tom     45      m                       4    mysql       2011-08-12
 
 
       交叉 :內鏈接 外鏈接 (左外 右外 自鏈接) UNION鏈接
          UNION 將錶鏈接起來  排序時要有括弧括起來:
              (select * from course order by id limit 2) UNION (select * from course2 order by id desc limit 2);
              (select * from course order by id limit 2) UNION (select * from course2 order by id desc limit 2) ORDER BY id
 
              交叉鏈接:
                     內鏈接:多個表中由相同的字段創建鏈接關係
                     select name, course.course from stu, course where stu.course=course.id
                     select s.name, c.course from stu as s,course as c where s.course=c.id;  取別名
                     外鏈接:左外 join on 多個表
                     SELECT * FROM stu as s left join course as c on s.course=c.id;where age > 20;
                            右外 join on
                     SELECT * FROM stu as s right join course as c on s.course=c.id where s.sex='m';
                            自鏈接 inner join y 一個表中
                     select s1.name as HOME, s2.name as CURT from stu as s1 inner join stu as s2;
                    select s1.name as HOME, s2.name as CURT from stu as s1 inner join stu as s2 where s1.name <> s2.name;
                    
子查詢:多的查詢條件 一個查詢是針對另外一個查詢的結果進行的
                     select name,course from stu where sex='m' and course=rh033;
                     select name from stu where course=(select id from course='luoyingfa') 等號後的查詢的返回結果要爲一個
                     select s1.name from (select * from stu where sex='m') as s1 where s1.course='2'  from後用子查詢要起別名
         in 使用子查詢:
                     select s.name from stu as s where s.course in (select id from course where course like 'L%');
                     select name from stu where course in (select id from course where startdate>' 2010-11-01 ');
相關文章
相關標籤/搜索