sql語句--------基本

三種sql語句:html

SQL語言主要用於存取數據、查詢數據、更新數據和管理關係數據庫系統,SQL語言由IBM開發。SQL語言分爲3種類型:
#一、DDL語句    數據庫定義語言: 數據庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER
#二、DML語句    數據庫操縱語言: 插入數據INSERT、刪除數據DELETE、更新數據UPDATE、查詢數據SELECT
#三、DCL語句    數據庫控制語言: 例如控制用戶的訪問權限GRANT、REVOKE
 #1. 操做文件夾(庫)
 
 
增:create database db1 charset utf8;
  能夠由字母、數字、下劃線、@、#、$   區分大小寫   惟一性   不能使用關鍵字如 create select   不能單獨使用數字   最長128位

查:show databases;  

  show create database db1; 
  select database();
選擇數據庫:USE db1;
刪除: drop database db1;
改:alter database db1 charset latin1; 
  只能修改庫的字符集,改不了其餘。
    操做文件(表)
先切換到文件夾下:use db1
create table t1(id int) engine=innodb default charset=utf-8; 增:
create table 表名(

字段名1 類型[(寬度) 約束條件],
字段名2 類型[(寬度) 約束條件],
字段名3 類型[(寬度) 約束條件]
);
  1. 在同一張表中,字段名是不能相同
  2. 寬度和約束條件可選
  3. 字段名和類型是必須的

複製表:create table t2 select * from t1; 不會複製主鍵、外鍵和索引
只複製表結構:create table t2 like t1;
       create table t2 select * from t1 where 1=2;  #設置一個不存在的條件
查:show tables  
  desc t1;
刪:drop table t1;
改:alter table t1 rename t2;  #修改表名
  alter table t1 engine=innodb;  #修改表引擎
  修改字段:
    alter table t1 modify name
char(3);  #修改字段約束條件,不能改字段名
    alter table t1 change name name1
char(2);  #change能夠修改字段名同時能夠修改字段約束條件
    注意:修改約束條件的時候必須與建立字段時同樣將各屬性寫完整了,可是有個例外,給主鍵設置自增時,不能寫primary key,不然會報多主鍵錯誤。
    刪除主鍵也不用常規modify的方式,須要:alter table t1 drop primary key;

  增長字段:
    alter table t1 add id int;
    alter table t1 add id int first;  #增長字段做爲第一個字段
    alter table t1 add id int afer name;  #在某字段後面增長新字段
  刪除字段:
    alter table t1 drop id;

字段的約束條件
  約束條件直接用空格分開
  not null  #非空
  default xx  #默認值
  primary key 或 primary key() #設置爲主鍵,建立複合主鍵:create table t1(id int,name varchar(10),primary key(id,name)) 增長:alter table t1 add primary key(c1,c2);
  auto_increment  #自增
  unique 或 unique key() #惟一鍵
  foreign key() references x()  #外鍵
  

  外鍵操做mysql

1:建立一個父表,主鍵做爲子表的外鍵:  create table province(      pId int primary key auto_increment,      pName varchar(20)  ); 2:建立子表,外鍵是父表的主鍵:  create table user(  userId int primary key auto_increment,  userName varchar(40),  pid int,  foreign key(pid) references province(pId)  ); 給一張表添加外鍵,即給子表的外鍵添加主鍵的規則: 在子表聲明一個字段pid int,用於做爲子表的外鍵,foreign key(子表的外鍵字段) references 父表的表名(父表的主鍵的字段名); 3:當建立好數據表時添加外鍵約束: alter table user add foreign key(pid) references province(pId); alter table 子表的數據表名 add foreign key(子表的外鍵名稱) references 父表的數據表名稱(父表的主鍵名稱);

外鍵注意:

1.1 sql建表時必須先創建被關聯表,插入數據必須先插入被關聯表的數據
1.2 外鍵改變時動做cascade set null restrict no action
1.3 多對多,須要先建立第三張表,第三表儲存前兩張表的關係對應,第三張表建立兩個外鍵指向前兩張表。
1.4 一對一,兩張表的關係爲第二張表是第一張表信息的補充,在第二張表中建立外鍵指向第一張表,而且設置unique。sql

 

創建索引數據庫

   

普通索引INDEX:加速查找 彙集索引:主鍵索引,葉子節點存放了全部字段的數據
輔助索引:普通索引和惟一索引,葉子節點只存放該字段的數據 惟一索引:
-主鍵索引PRIMARY KEY:加速查找+約束(不爲空、不能重複) -惟一索引UNIQUE:加速查找+約束(不能重複) 聯合索引: -PRIMARY KEY(id,name):聯合主鍵索引 -UNIQUE(id,name):聯合惟一索引 -INDEX(id,name):聯合普通索引

 

舉個例子來講,好比你在爲某商場作一個會員卡的系統。 這個系統有一個會員表 有下列字段: 會員編號 INT 會員姓名 VARCHAR(10) 會員身份證號碼 VARCHAR(18) 會員電話 VARCHAR(10) 會員住址 VARCHAR(50) 會員備註信息 TEXT 那麼這個 會員編號,做爲主鍵,使用 PRIMARY 會員姓名 若是要建索引的話,那麼就是普通的 INDEX 會員身份證號碼 若是要建索引的話,那麼能夠選擇 UNIQUE (惟一的,不容許重複) #除此以外還有全文索引,即FULLTEXT 會員備註信息 , 若是須要建索引的話,能夠選擇全文搜索。 用於搜索很長一篇文章的時候,效果最好。 用在比較短的文本,若是就一兩行字的,普通的 INDEX 也能夠。 但其實對於全文搜索,咱們並不會使用MySQL自帶的該索引,而是會選擇第三方軟件如Sphinx,專門來作全文搜索。 #其餘的如空間索引SPATIAL,瞭解便可,幾乎不用
#方法一:建立表時   CREATE TABLE 表名 ( 字段名1 數據類型 [完整性約束條件…], 字段名2 數據類型 [完整性約束條件…], [UNIQUE | FULLTEXT | SPATIAL ]   INDEX | KEY [索引名] (字段名[(長度)] [ASC |DESC]) ); #方法二:CREATE在已存在的表上建立索引 CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(長度)] [ASC |DESC]) ; #方法三:ALTER TABLE在已存在的表上建立索引 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (字段名[(長度)] [ASC |DESC]) ; #刪除索引:DROP INDEX 索引名 ON 表名字;
舉例:
#方式一
create table t1(
    id int,
    name char,
    age int,
    sex enum('male','female'),
    unique key uni_id(id),
    index ix_name(name) #index沒有key
);


#方式二
create index ix_age on t1(age);

#方式三
alter table t1 add index ix_sex(sex);

#查看
mysql> show create table t1;
| t1    | CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL,
  `name` char(1) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` enum('male','female') DEFAULT NULL,
  UNIQUE KEY `uni_id` (`id`),
  KEY `ix_name` (`name`),
  KEY `ix_age` (`age`),
  KEY `ix_sex` (`sex`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 

 

 

    數據操做spa

 插入數據:
1. 插入完整數據(順序插入) 語法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); 語法二: INSERT INTO 表名 VALUES (值1,值2,值3…值n); 2. 指定字段插入數據 語法: INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…); 3. 插入多條記錄 語法: INSERT INTO 表名 VALUES (值1,值2,值3…值n), (值1,值2,值3…值n), (值1,值2,值3…值n); 4. 插入查詢結果 語法: INSERT INTO 表名(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM 表2 WHERE …;
 

  更新數據:rest

語法: UPDATE 表名 SET 字段1=值1, 字段2=值2, WHERE CONDITION; 示例: UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’;

  刪除數據:code

 
語法: DELETE FROM 表名 WHERE CONITION; 示例: DELETE FROM mysql.user WHERE password=’’; 注意:delete from table1 這條命令能夠刪除表中全部數據,但不會重置自增字段屬性的記錄。delete不是用來清空表的,而是用來刪除特定的數據,若是要清空表用truncate table1。
相關文章
相關標籤/搜索