A.查詢結果的分組條件 B.組的篩選條件php
C.限定返回的行的判斷條件 D.對結果集進行排序html
A.樹 B.網絡 C.圖 D.二維表前端
A.數據模型 B.數據庫管理系統 C.數據庫 D.數據庫管理員java
A.元組 B.字段 C.屬性 D.碼mysql
A程序維護 B數據維護 C編碼維護 D硬件維護linux
A.mssql B memcached C mongodb D postgresql E cassandra F couchdb G redisc++
A 在proxy上處理數據庫訪問問題程序員
B在www服務器上處理黑客的非法訪問問題web
C 在www服務器上處理數據庫的訪問問題正則表達式
D 在sendmail郵件系統是上處理數據庫的訪問問題
1.1.1.8 如下哪一個端口爲遠程登錄默認端口(C)
A1433 B3389 C3306
①官網下載二進制安裝包;
②解壓二進制包;
③修改配置文件/etc/my.cnf
④初始化配置;
⑤啓動
mysql -u -p -P -h
show full processlist
mysql -u -p -e "show databases;"
SGA區由數據緩衝區,共享池,重作日誌緩衝區,大型池,java池構成;PGA區由排序區,私有SQL區以及堆棧構成。 SGA區是由Oracle分配的共享內存結構,包含一個數據庫實例共享的數據和控制信息。當多個用戶同時鏈接同一個實例時,SGA區數據供多個用戶共享,因此SGA區又稱爲共享全局區。用戶對數據庫的各類操做主要在SGA區中進行。該內存區隨數據庫實例的建立而分配,隨實例的終止而釋放。PGA區是在用戶進程鏈接數據庫,建立一個會話時,由oracle爲用戶分配的內存區域,保存當前用戶私有的數據和控制信息,所以該區又稱爲私有全局區。每一個服務器進程只能訪問本身的PGA區,全部服務器進程PGA區總和即爲實例的PGA區的大小。
共享表空間,獨立表空間
共享表空間:一個數據的文件都存放在一個文件內。
獨立表空間:一個表有一個idb和frm文件。
字符集編碼不一致問題
alter table 表名 default character set utf8 collate utf8_general_ci;
--skip-grand-tables #跳過 受權表
--skip-networking #跳過網絡鏈接
廠家: 最新版本: 熟悉的版本: 接觸過的版本
mysql 5.6 5.7
mysqladmin -uroot -p password oldboy123
set password for 用戶@localhost=password('新密碼')
mysql> alter user '用戶名'@'登陸主機' identified by '密碼(自定義)';
關係型:mysql,oracle
非關係型:redis,mongodb
非關係型數據快,操做簡單,可是又丟數據風險。
存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶能夠調用存儲過程,而函數一般是數據庫定義的方法,它接收參數返回某種類型的值而且不涉及特定用戶表。
視圖是一種虛擬的表,具備和物理表相同的功能,能夠對視圖進行增改查操做,視圖一般是有一個表或者多個表的行或者列的子集。對視圖的修改不影響基本表。它使得咱們獲取數據更容易,相比多表查詢。
遊標:是對查詢出來的結果集做爲一個單元來有效的處理。遊標能夠定在該單元中的特定行,從結果集的當前行檢索一行或多行。能夠對結果集當前行作修改。通常不使用遊標,可是須要逐條處理數據的時候,遊標顯得十分重要。
高可用mysql及主從架構和讀寫分離。
2000
select @@default_storage_engine;
myisam:表級鎖,不支持事務,支持溫備。
innodb:行級鎖,支持事務,支持溫備。自動故障恢復,外鍵。
redis,mongodb,memcached
A.從S表中完全刪除年齡大於60歲的記錄
B.S表中年齡大於60歲的記錄被加上刪除標記
C.刪除S表
D.刪除S表的年齡列
A.INSERT B.UPDATE C.DELETE D.TRUNCATE
A.HOST B.DB C.COLUMNS_PRIV D.MANAGER
A.INSERT B.UPDATE C.DELETE D.CREATE
A.SELECT B.UPDATE C.INSERT D.DROUP
A.DELETE B. DROP C.CLEAR D.RI MORE
Arm table t1 Bdelete table t1 Cdrop table t1 Dtruncate t1
A.alter table user rename as userinfo B .rename to userinfo from user
C.rename user to userinfo D.rename user as userinfo
Amodify table Bmodify structure Calter table Dalter structure
A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH
A.CREATE SCHEMA B.CREATE TABLE C.CREATE VIEW D.CREATE INDEX
A層次數據庫 B網絡數據庫 C關係數據庫 D非數據庫
A包括15歲和35歲 B不包括15歲和35歲
C包括15歲但不包括35歲 D包括35歲但不包括15歲
A數據定義功能 B數據管理功能 C數據操縱功能 D數據控制功能
A.Delete * from pat_visit Where inp_no = '6' B.Delete From pat_visit Where inp_no ='6'
C.Delete pat_visit Where inp_no = '6' D.Delete pat_visit Set inp_no = '6'
Where 子句是用來指定 "行" 的條件的,而 Having 子句是指定 「組」 的條件的
因此 Where 子句 = 指定行所對應的條件
因此 Having 子句 = 指定組所對應的條件
當在 Where 子句和 Having 子句中均可以使用的條件,從語句的執行效率來看,最好寫在 Where 子
句中。
在使用 Count 函數等對錶中的數據進行聚合操做時,DBMS 內部會進行排序處理,而排序操做會增
加機器的負擔,減小排序的行數,能夠增長處理速度。
使用 Where 子句指定條件時,因爲排序以前就對數據進行了過濾,因此可以減小排序的數據量。但
是 Having 子句是在排序以後纔對數據進行分組的,所以與前者相比,須要排序的數據量就要多得
多。
第三,使用 Where 子句更具速度優點的另外一個理由是,能夠對 Where 子句指定條件所對應的列建立
索引,這樣能夠大幅提升處理速度。
第四,Where 子句中不能使用聚合函數,而 Having 子句中能夠。
show databases;
create database;
select * from table;
update table set state
select * from order limit 2,5
grand all on *.* to admin@'192.168.0.%' identified '123';
select to_base64(name) from 'order';
沒有合理的索引條件下,須要大量的CPU時間來排序和處理。
select group_contat(字段1) from db group by '字段2'
select sum(字段1) from db group by '字段2'
select max(字段1) from db group by "字段2"
CSBH CSBH_COUNT
20 2
10 8
CSBH SUM_GJQJ
20 211.039900
10 871.317850
select CSBH,count(CSBH) as CSBH_COUNT from table group by CSBH; select CSBH,sum(CSBH) as SUM_GJQJ from table group by CSBH;
alter table oldboy add primary key pri(id);
表A user_table
Name age city
Tom 20 bj
Jimmy 50 nj
Zhou 33 sh
Jing 30 nj
Nanan 28 sh
create table user_table(id int(11),name varchar(20),age int,city varchar(20)) engine=innodb; insert into user_table(name,age,city) values(tom,20,bj),(jimmy,50,nj),(zhou,33,sh),(jing,30,nj),(nannan,28,sh);
select city,sum(name),avg(age) from user_table group by city;
表Student 學生表
S_id Sname Ssex
1 Xiaoli 男
2 xiaowang 女
3 zhanglong 男
4 zhaohu 女
create table student(s_id int(11),sname varchar(20),ssex varchar(20)) engine=innodb; insert into student(s_id,sname,ssex) values(1,xiaoli,男),(2,xiaowang,女),(3,zhanglong,男),(4,zhaohu,女);
表 Course 課 程 表
C_id Cname T_id
1 語文 1
2 歷史 3
3 數學 2
4 政治 4
create table course(c_id int(11),cname varchar(20),t_id int(20)) engine=innodb; insert into course(c_id,cname,t_id) values(1,語文,1),(2,歷史,3),(3,數學,2),(4,政治,4)
表SC 成績表
s_id C_id score
1 2 99
3 4 88
1 3 55
2 1 77
create table sc(s_id int(11),c_id int(11),score varchar(20)) engine=innodb; insert into sc(s_id,c_id,score) values(1,2,99),(3,4,88),(1,3,55),(2,1,77);
表Teacher 教師表
T_id Tname
1 zhangsan
2 lisi
3 wangwu
4 zhaoliu
create table teacher(t_id int(11),tname varchar(20)) engine=innodb; insert into teacher(t_id,tname) values(1,zhangsan),(2,lisi),(3,wangwu),(4,zhouliu);
查詢上全部同窗的學號姓名、選課數、總成績
①select student.s_id,avg(sc.score) from student join sc on student.s_id=sc.s_id having avg(sc.score)>60; ②select student.s_id,student.sname,count(sc.cname),sum(sc.score) from student join sc on student.s_id=sc.s_id
A: B
ID Name ID hobby
1 tim 1 football
2 Jimmy 2 tennis
3 John 3 soccer
請寫出Select A.Name, B.Hobbt from A,B where A.id = B.id的結果
select a.name,b.hobbt from a jon b on a.id=b.id
grand all on op.test to dev@'%' identified '123';
select * from table where time between '2006-01-01' and '2006-01-31';
delete * from tablename;或者truncate table name;
select name,sex,birthday,company from table order by company desc;
select name,mingzu,birthday from table where sex='女' and 面貌!=中共黨員;
select name,sex,birthday,政治面貌,company,職務,批准日期 from table where xueli=boshi order by 批准日期;
select count(name) from table group by company;
abcabc53abc36
select name from table order by age desc limit 10;
表 dept (系):
dept_id(系編號),dept_name(系名稱)
表 class(班級):
class_id(班編號),dept_i(系編號),class_name(班名)
表 setdent(學生):
setdent_id(學生編號),class_id(班編號), sex(性別),birthday(生日)
select count(setdent.setdent_id),date_format(setdent.birthday,%m) from setdent join class on setdent.class_id=class.class_id join deptp on dept.dept_id=class.dept_id where dept.dept_name='計算機' and sex='男' group by Date_format(setdent.birthday,%m) order by date_format(setdent.birthday,%m) desc;
查詢T表中地址中包含「北京」的SQL語句
插入一條數據到T表中
請寫出將T表中第3~5行數據列出來的SQL語句
select * from t where ADDRESS="%北京%";
insert into t(ID,NAME,ADDRESS,PHONE,LOGDATE) values(,,,,);
select * from t limit 2,3;
create database
create table ;
insert into t()values()
表名1:cardApply
字段(字段名/類型/長度):
applyNo varchar 8; //申請單號(關鍵字)
applyDate date 8; //申請日期
state varchar 2; //申請狀態
表2:cardApplyDetail
字段(字段名/類型/長度):
applyNo varchar 8; //申請單號(關鍵字)
name varchar 30; //申請人姓名
idCard varchar 5; //ID卡號
applyNo varchar 8; //申請單號(關鍵字)
其中,兩個表的關聯字段爲申請單號,依據上述信息完成1-5題目:
查詢ID卡號爲11111的申請日期
select cardApply.applydate from cardApply join cardApplyDetail on cardApplyDetail.applyNo=cardApply.applyNo where cardApplyDetail.idCard ='11111';
查詢同一個ID卡號有兩條以上記錄的ID卡號及記錄個數
select idCard,count(idCard) from cardApplyDetail group by idCard having count(idCard )>2;
將ID卡號爲11111的記錄在兩個表中的申請狀態均改成02
update cardApplyDetail set state='02' where idCard='11111';
刪除cardApplyDetall 表中全部姓李的記錄
delete * from cardApplyDetall where name='李%';
假如某一天有10我的申請,另一天有20我的申請,還有一天有30我的申請,查詢出申請卡最多的那一天日期
select applyDate,count(applyNo) from cardApply group by applyDate order by count(applyNo) desc limit 1;
Student S# Sname Sage Ssex 學生表
Course C# T# Cname () 課程表
SC S# C# score 成績表
Teacher T# tname 教師表
寫出學生表建表語句
create table student( s# int,not null,primary key auto_increment,sname varchar(20) not null,sage int not null,ssex enum('m','f') not null default 'm') engine=innodb charset='utf-8';
查詢姓張的學生名單
select * from student where name='張%';
查詢全部同窗的學號、姓名、選課數、總成績
select student.s#,student.sname,count(sc.c#),sum(sc.score) from student join sc on sc.s#=student.s# group by student.sname;
查詢選修「葉平」老師所授課程的學生中,成績最高的學生姓名及其成績
select student.sname,max(score),avg(score) from student join sc on student.s#=sc.s# join course on course.c#=sc.course.c# join teacher on course.t#=teacher.t# group by teacher.tname where teacher.tname='葉平';
第一題中的教師表中哪一個字段能夠創建惟一索引?寫出創建惟一索引的語句
t#創建惟一索引。
alter table teacher add unique key index(t#);
如何檢查第一題中學生表在數據庫中所佔的空間大小
select table_name,(index_length+avg_row_length*table_rows)/1024/1024 from information_schema.tables where table_name='student';
如何將第一題中的4個表進行備份,數據庫用戶、密碼爲:admin/admin 數據庫名爲:dbschool
select concat("mysqldump -uadmin -padmin" ,talble_schema " ",table_name,">temp/",table_schema,"__",table_name,".sql") from infomation_schema.tables where table_schema not in ('infomation_schema','performance_schema','sys') into outfile 'tmp.bak.sh';
select t_depy.depyname ,avg(t_salary.salary) from t_dept join t_salary on t_dept.deptid=t_salary.deptid group by t_dept.deptid having avg(t_salary.salary)>3000;
建表student、course、SC
create table student(sno int,sname varchar(20),sage int,ssex varchar(10))
create table course(cno int,cname varchar(20),ccredit varchar(20))
create table course(sno int , cno int,grade varchar(20))
查詢年齡小於20的學生學號、年齡,並顯示
select sno,sname,sage from student where sage<20;
查詢年齡不在20-23(包括20,23)的學生的成績
select student.sname sc.grade from student join sc on student.sno=sc.sno where student.sage<20 and student.sage>23;
select id,count(id) from a group by id having count(id)>3;
mysql -uroot -p123456 -S /opt/mysql3306/mysql3306.sock -e "update table neutron.ipallocations set ip_address="202.113.14.92" where ip_address='10.4.182.36';
查詢某一個表前20條記錄
select * from t limit 20;
某公司從下個月起,每一個人工資在原有基礎上上漲10%
update table a salary=salary+salary*0.1 where date=date_format(now(),%m)+1
刪除某個表中日期爲2017-01-01之前的數據
delete * from a where date<'2017-01-01';
新增一條記錄
insert into a values();
備份數據庫
mysqldump -uroot -poldboy123 -A -master-date -single-transaction -R -E -triggers >/tmp.bak.gz
客戶表customers (cust_id,cust_name,cust_opendate())
帳戶表accounts(acc_id,acc_name,cust_id,acc_opendate(帳戶開通時間))
用戶表users(user_id,user_name,cust_id,lost_login_date(用戶最後登陸時間))
每一個客戶能夠開通多個賬號,每一個客戶有多個用戶,cust_id,acc_id,user_id分別爲客戶、帳戶、用戶的惟一標誌,cust_opendate,acc_opendate,lost_login_date類型爲date按照要求用一條sql語句完成
統計每月開通的客戶數
select count(cust_id) ,date.format(accounts.acc_opendate,%m) from customers join accounts on customers.cust_id=accounts.cust_id group by date_format(accounts.acc_opendate,%m);
列出上個月開通客戶列表,並輸出這些客戶所具備的帳戶和用戶數量
select accounts.cust.id,count(users.user.id) from accounts join users on accounts.cust_id=users.cust_id where data_format(accounts.acc_opendate,%m)=date_format(now(),%m)-1;
統計三個月內登陸過的客戶數量
select count(user_id) from users where date_format(lost_login_date,%m) in date_format(now(),%m)-1,date_format(now(),%m)-2,date_format(now(),%m)-3;
統計老客戶今年開通帳戶的數量,老客戶是指今年之前開通的帳戶
select date_format(cust_opendate,%Y),count(cust_id) from customers where date.format(cust_opendate,%Y)=date.format(now(),%Y);
表名 user
Name Tel Content Date
張三 13333663366 大專畢業 2006-10-11
張三 13612312331 本科畢業 2006-10-15
張四 021-55665566 中專畢業 2006-10-15
(a)有一新記錄(小王 13254748547 高中畢業 2007-05-06)請用SQL語句新增至表中
insert into user values(‘小王 ’,‘13254748547’, ‘高中畢業’, ‘2007-05-06’);
(b)請用sql語句把張三的時間更新成爲當前系統時間
update user set date=date_format(now(),"%Y-%m-%d") where name='張三';
(c)請寫出刪除名爲張四的所有記錄
delete from user where name='張四';
grand all on *.* to oldboy@localhost identified '123';
create tablespace neuspace datefile 'd:\data\neudata.dbf' size 200 autoextend on text 5M maxsize 500M;
create user tom identified by tom default tablespace account;
grand connect,resource to tom;
grand select on scott.emp to tom;
grand update on SALARY.MGR to tom;
屬性 類型(長度) 默認值 約束 含義
CLASSNO 數值(2) 無 主鍵 班級編號
CNAME 變長字符(10)無 非空 班級名稱
create table class(classon int(2) not null primary key auto_increment comment '班級編號',cname varchar(10) not null comment '班級名稱')
select count(姓名),年級 from a group by name order by 年級 ;
alter table class add index class_sname_idx(cname);
學生信息表
姓名(Name) 學號(Code)
張三 001
李四 002
馬五 003
甲六 004
考試信息表
學號 學科 成績
001 數學 80
002 數學 75
001 語文 90
002 語文 80
001 英語 90
002 英語 85
003 英語 80
004 英語 70
查詢各科成績的平均分,顯示欄位爲學科、平均分,sql怎麼寫
select 學科,avg(成績)from 考試 group by 學科;
查詢全部學生各科成績,顯示欄位爲姓名、學號、學科、成績,並以學號與學科排序,沒有成績的學生也須要列出,sql怎麼編寫
select a.name,a.code,b.course,b.grade from a join b on a.id=b.id order by course;
查詢出單科成績最高的,顯示欄位爲:姓名、學號、學科、成績,sql怎麼編寫
select a.name,a.id,b.course,max(grade) from a join b a.id=b.id group by b.course;
列出每位學生各科成績,要求輸出格式:姓名、學號、語文成績、數學成績、英語成績,sql怎麼寫
select a.name,a.id
case when b.學科=‘語文’ then b.成績 then as ‘語文成績’,
case when b.學科=‘數學’ then b.成績 then as ‘數學成績’
case when b.學科=‘英語’ then b.成績 then as ‘英語成績’
from a join b on a.id=b.id
group by a.id;
1.2.3.46 假若有A*和B兩個表,A表中包括ID,COL1,COL2,COL3等欄位,B表中包括ID,COL1,COL2,COL4,COL5等欄位,現須要把B中的CLO1,COL2內容更新到A表COL1,COL2中,ID***爲關鍵字段,要求只寫一個SQL**
update table a set (select clo1,col2 from b)
explain
A必定要,由於索引有助於加快搜索記錄的進程
B不適宜,由於對少林記錄的表進行索引實際上會產生不利的影響
C必定要,由於索引對於任何數據庫表都是必要的
D沒有必要,由於創建索引對任何數據庫的性能都沒有影響
好處,在有索引的條件下查詢速度快。
壞處,須要維護成本。
主鍵索引,惟一列,聯合列;
A.SELECT * FROM customer_master WHERE first_name = 'Ed';
B.SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE '%rane' AND first_name = 'Ed';
C.SELECT * FROM CUSTOMER_MASTER WHERE last_name = 'Crane' AND first_name LIKE '%Ed';
D.SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE 'Crane%' ORDER BY first_name,last_name;
E.SELECT * FROM CUSTOMER_MASTER WHERE last_name='Crane' OR first_name='ED';
索引有 B-TREE、BIT、CLUSTER 等類型。ORACLE 使用了一個複雜的自平衡 B-tree 結構;一般來
說,在表上創建恰當的索引,查詢時會改進查詢性能。但在進行插入、刪除、修改時,同時會進行
索引的修改,在性能上有必定的影響。有索引且查詢條件能使用索引時,數據庫會先度取索引,根
據索引內容和查詢條件,查詢出 ROWID,再根據 ROWID 取出須要的數據。因爲索引內容一般比全
表內容要少不少,所以經過先讀索引,能減小 I/O,提升查詢性能。
b-tree index/bitmap index/function index/patitional index(local/global)索引一般能提升 select/update/delete
的性能,會下降 insert 的速度。
A. 3 B. 4 C.5 D. 6
A二叉排序樹 B.大頂堆 C 小頂堆 D.平衡二叉樹
查詢不須要的記錄,使用 limit 解決;
多表關聯返回所有列,指定 A.id, A.name, B.age;
老是取出所有列,SELECT * 會讓優化器沒法完成索引覆蓋掃描的優化。
優化 count() 查詢
優化關聯查詢
優化子查詢(即嵌套查詢)
優化 GROUP BY 和 DISTINCT
優化 LIMIT 分頁
優化 UNION 查詢
創建索引
分區(如 MySQL,按時間分區)
儘可能使用固定長度字段和限制字段長度(如 varchar(10))
增長緩衝區
若是設計表的級聯,不一樣的表存儲在不一樣磁盤上,以增長 I/O 速度
優化 sql 語句,減小比較次數
限制返回條目數(mysql 中使用 limit)
SQL> desc tab_201707;
Name Type Nullable Default Comments
ID NUMBER 自增
CID NUMBER Y 批次ID
CODE VARCHER2(20) Y 特服號
CORPORATEID NUMBER 企業ID
USERID NUMBER Y 用戶ID
請寫出SQL語句,統計七、八、9三個月,每一個USERID的記錄總數
select userid,count(userid) from tab_201707;
XSS 跨站腳本攻擊:兩種狀況。一種經過外部輸入而後直接在瀏覽器端觸發,即反射型 XSS;還有
一種則是先把利用代碼保存在數據庫或文件中,當 web 程序讀取利用代碼並輸出在頁面上時觸發漏
洞,即存儲型 XSS。DOM 型 XSS 是一種特殊的反射型 XSS。
跨站點腳本(XSS)容許攻擊者經過利用因特網服務器的漏洞來發送惡意代碼到其餘用戶。攻擊者
利用跨站點腳本(XSS)攻擊向那些看似可信任的連接中注入惡意代碼。當用戶點擊了連接後,內
嵌的程序將被提交而且會在用戶的電腦上執行,這會使黑客獲取。
危害:前端頁面能作的事它都能作。(不只僅盜取 cookie、修改頁面等)
漏洞防範
(1) 特殊字符 HTML 實體轉碼。最好的過濾方式是在輸出和二次調用的時候進行加 HTML 實體
一類的轉碼,防止腳本注入。
(2) 標籤事件屬性黑名單。特殊字符容易被繞過,因此還得加標籤事件得黑名單或者白
名單,這裏推薦使用白名單的方式,實現規則能夠直接使用正則表達式來匹配,若是匹配到的事件
不在白名單列表,就能夠直接攔截,而不是過濾爲空。
首先應該從系統級別來排查。先找出到底哪裏慢,是特定操做慢呢,仍是全部操做都慢了。
既然是忽然變慢,那麼就是說以前仍是比較快的。自從某個特殊事件發生後,慢了下來。特殊事件
通常包括:
一、程序作了修改。
二、忽然有大數據量的系統訪問。
三、某些不經常使用功能忽然啓用,或大量訪問。
四、某些硬件出了功能性問題。
對於系統總體變慢,基本上仍是先查系統日誌。查最近的系統更新日誌。查看磁盤剩餘容量。硬件
是否由異常。
select v_id,v_owner,v_uesr,v_options,v_date,v_anonymous from t_vote_hash_by_id_65 where v_id='536' and v_user='yu281590760' and v_owner='xiwangkuaile222';
一、sql 語句的執行計劃是否正常。
二、減小應用和數據庫的交互次數、同一個 sql 語句的執行次數。
三、數據庫實體的碎片的整理(特別是對某些表常常進行 insert 和 delete 動做,尤爲注意,索引字段
爲系列字段、自增加字段、時間字段,對於業務比較頻繁的系統,最好一個月重建一次)。
四、減 少表之間的關聯,特別對於批量數據處理,儘可能單表查詢數據,統一在內存中進行邏輯處理,減小
數據庫壓力(java 處理批量數據不可取,儘可能用 c 或者 c++ 進行處理,效率大大提高)。
五、對訪問頻繁的數據,充分利用數據庫 cache 和應用的緩存。
六、數據量比較大的,在設計過程當中,爲了減小其餘表的關聯,增長一些冗餘字段,提升查詢性能。
listener.log 過大致使
A.mysqldump -h ip -u -p DBNAME>back.sql B.mysqldump -P ip -h DBNAME>back.sql
C.mysqldump -u ip -P DBNAME>back.sql D.mysqldump -h ip -u DBNAME>back.sql
A、mysql -opt mail uroot-p > mail sql B、mysqldump --opt mail -uroot p > mail.sql
C、mysql -uroot -p > mail.sql D.mysql -uroot -p < mail sql
A錯誤日誌 B事務日誌 C中繼日誌 Dredo log
A中止業務開始備份 B 中止數據庫開始備份 C不須要中止備份 D根據狀況而定
mysql -uroot -poldboy123 -B lest >/tmp/lest.bak.gz
source /tmp/lest.bak.gz
crontab -e
00 02 * * * /bin/sh /server-scripts/backup.sh >/dev/null 1&>2
mysqldump -uroot -poldboy123 -B mfdata >/data/mysql/backup_$(date +%F).bak.sql
xtraback
mysqldump
本地備份 mysqldump -uroot -p -S /tmp/mysql.sock
遠程備份 mysqldump -uroot -p -h 10.0.0.51 -P3306
1.change master to 時,ip pot user password binlog position 寫入到 master.info 進行記錄
\2. start slave 時,從庫會啓動 IO 線程和 SQL 線程
3.IO_T,讀取 master.info 信息,獲取主庫信息鏈接主庫
\4. 主庫會生成一個準備 binlog DUMP 線程,來響應從庫
\5. IO_T 根據 master.info 記錄的 binlog 文件名和 position 號,請求主庫 DUMP 最新日誌
\6. DUMP 線程檢查主庫的 binlog 日誌,若是有新的,TP(傳送)給從從庫的 IO_T
\7. IO_T 將收到的日誌存儲到了 TCP/IP 緩存,當即返回 ACK 給主庫 ,主庫工做完成
8.IO_T 將緩存中的數據,存儲到 relay-log 日誌文件,更新 master.info 文件 binlog 文件名和 postion,
IO_T 工做完成
9.SQL_T 讀取 relay-log.info 文件,獲取到上次執行到的 relay-log 的位置,做爲起點,回放 relay-log
10.SQL_T 回放完成以後,會更新 relay-log.info 文件。
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.gz;
create database test;
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.gz
source /tmp/backup. bak.gz
mysqldump -uroot -poldboy123 testdb --ignore-table test123>/tmp/backup/test.bak.gz
mysqldump -uroot -poldboy testdb </tmp/backup/test.bak.gz
還原直接複製目錄的備份 經過這種方式還原時,必須保證兩個 MySQL 數據庫的版本號是相同
的。MyISAM 類型的表有效,對於 InnoDB 類型的表不可用,InnoDB 表的表空間不能直接複製。
1.change master to 時,ip pot user password binlog position 寫入到 master.info 進行記錄
\2. start slave 時,從庫會啓動 IO 線程和 SQL 線程
3.IO_T,讀取 master.info 信息,獲取主庫信息鏈接主庫
\4. 主庫會生成一個準備 binlog DUMP 線程,來響應從庫
\5. IO_T 根據 master.info 記錄的 binlog 文件名和 position 號,請求主庫 DUMP 最新日誌
\6. DUMP 線程檢查主庫的 binlog 日誌,若是有新的,TP(傳送)給從從庫的 IO_T
\7. IO_T 將收到的日誌存儲到了 TCP/IP 緩存,當即返回 ACK 給主庫 ,主庫工做完成
8.IO_T 將緩存中的數據,存儲到 relay-log 日誌文件,更新 master.info 文件 binlog 文件名和 postion,
IO_T 工做完成
9.SQL_T 讀取 relay-log.info 文件,獲取到上次執行到的 relay-log 的位置,做爲起點,回放 relay-log
10.SQL_T 回放完成以後,會更新 relay-log.info 文件。
\11. relay-log 會有自動清理的功能。
監控
1)監控 MYSQL 的運行狀態;
2)Slave 機器的 IO 和 SQL 狀態都必須爲 YES,缺一不可;
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql
grand all on . to jfdeu@localhost identified by 'jfedu.net';
show slave status\G;
Slave_IO_Running
Slave_SQL_Runing
鎖監控設計到的命令:
show status like 'innodb_rows_lock%'
select * from information_schema.innodb_trx;
select * from sys.innodb_lock_waits;
select * from performance_schema.threads;
select * from performance_schema.events_statements_current;
select * from performance_schema.events_statements_history;
---------------------
1 主庫寫 binlog 不及時 *******
控制 binlog 從內存寫入磁盤的控制開關
每次事務提交都當即刷新 binlog 到磁盤(雙一標準中的其一)
sync_binlog=1
每次事務提交不當即寫入磁盤,靠操做系統判斷何時寫入
sync_binlog=0
說明:5.6 默認是 0,5.7 之後默認是 1
2 dump 線程多致使的,系統資源壓力大,因爲傳送日誌是串行的。
從庫越多,壓力越大
因爲超大事務存在,因爲是串行工做,會阻塞後續其餘事務的傳送。
解決方案:
減小大事務
group commit (須要配合 GTID 來實現的)
3 從庫-IO 線程阻塞
大事務拆成小事務
事務量大(主庫壓力大)
group commit 能夠緩解
業務的分離和分佈式(Mycat,InnoDB Cluster)
4 SQL 線程慢(Classic replication 傳統) *****
緣由:
從庫 默認只有一個 SQL 線程,串行回放事務。在主庫有併發事務量大,或者有超大事務時,都會導
致 SQL 延時較嚴重。
如何解決:
5.6 版本,加入了 GTID 特性,因此支持了併發 SQL 特性,基於不一樣庫實現並行回放事務
5.7 版本,GTID 功能進行了升級,能夠經過 Logical_clock 模式,實現事務級別的多 SQL 線程的回
放。咱們把這種複製模式叫作 MTS。
mysqldump -uroot -poldboy123 test >/tmp/bakcup/test.bak.sql
create databases test;
source /tmp/backup/test.bak.sql
binlog 有三種格式:Statement、Row 以及 Mixed。
–基於 SQL 語句的複製(statement-based replication,SBR),
–基於行的複製(row-based replication,RBR),
–混合模式複製(mixed-based replication,MBR)。
一、STATEMENT 模式(SBR)
每一條會修改數據的 sql 語句會記錄到 binlog 中。優勢是並不須要記錄每一條 sql 語句和每一行的數
據變化,減小了 binlog 日誌量,節約 IO,提升性能。缺點是在某些狀況下會致使 master-slave 中的
數據不一致(如 sleep()函數, last_insert_id(),以及 user-defined functions(udf)等會出現問題)
二、ROW 模式(RBR)
不記錄每條 sql 語句的上下文信息,僅需記錄哪條數據被修改了,修改爲什麼樣了。並且不會出現
某些特定狀況下的存儲過程、或 function、或 trigger 的調用和觸發沒法被正確複製的問題。缺點是
會產生大量的日誌,尤爲是 alter table 的時候會讓日誌暴漲。
三、 MIXED 模式(MBR)
以上兩種模式的混合使用,通常的複製使用 STATEMENT 模式保存 binlog,對於 STATEMENT 模式
沒法複製的操做使用 ROW 模式保存 binlog,MySQL 會根據執行的 SQL 語句選擇日誌保存方式。
show slave status\G;
slave_IO_Running
slave_SQL_Running
MHA+atlas
Mycat+MGR
InnoDB cluster
PXC
MGC
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql
source /tmp/backup.bak.sql
mysqldump
mysqldump -u 用戶名 -p 密碼 --databases 數據庫 1 數據庫 2 > xxx.sql
常見選項:
-u: 用戶名
-p: 密碼
-P: 端口號,不寫默認 3306
--all-databases, -A:備份全部數據庫
--databases, -B: 用於備份多個數據庫,若是沒有該選項,mysqldump 把第一個名字參數做爲數據庫
名,後面的做爲表名。使用該選項,mysqldum 把每一個名字都看成爲數據庫名。
-d: 只導出數據庫的表結構
-t: 只導出數據庫的數據
--quick, -q:快速導出
--xml, -X:導出爲 xml 文件
binlog 的格式也有三種:STATEMENT、ROW、MIXED 。
一、STATMENT 模式:基於 SQL 語句的複製(statement-based replication, SBR),每一條會修改數據的
sql 語句會記錄到 binlog 中。
二、基於行的複製(row-based replication, RBR):不記錄每一條 SQL 語句的上下文信息,僅需記錄哪
條數據被修改了,修改爲了什麼樣子了。
三、混合模式複製(mixed-based replication, MBR):以上兩種模式的混合使用,通常的複製使用
STATEMENT 模式保存 binlog,對於 STATEMENT 模式沒法複製的操做使用 ROW 模式保存
binlog,MySQL 會根據執行的 SQL 語句選擇日誌保存方式。
雙主原理:
雙向的主從複製,也就是互爲對方的從服務器,每臺服務器便是對方的主服務器,又是對方的從服
務器
數據庫複製 replication 的實現原理
1:主服務器凡運行語句,都產生一個二進制日誌 binlog
2:從服務器不斷讀取主服務器的 binlog
3:從主服務讀取到的 binlog,轉換爲自身可執行的 relaylog,
4:執行 relaylog
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
mysqlbinlog -d test mysql-bin.000003 >003bin.sql
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"><v:formulas></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:stroke></v:shapetype><v:shape id="圖片_x0020_10" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:6in;height:195pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""></v:imagedata></v:shape>
SAN(Storage Area Network)簡單點說就是能夠實現網絡中不一樣服務器的數據共享,
共享存儲可以爲數據庫服務器和存儲解耦。使用共享存儲時,服務器可以正常掛載文件系統並操
做, 若是服務器掛了,備用服務器能夠掛載相同的文件系統,執行須要的恢復操做,而後啓動 MySQL
mysqldump 備份不鎖表:加上--lock-tables=false 參數,
若是是 innodb,則加上--single-transcation 比較好。
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql
mysqldump -uroot -poldboy123 -B test >/temp/backup.bak.sql
異步複製
異步複製,主庫將事務 Binlog 事件寫入到 Binlog 文件中,此時主庫只會通知一下 Dump 線程發
送這些新的 Binlog,而後主庫就會繼續處理提交操做,而此時不會保證這些 Binlog 傳到任何一個
從庫節點上。
全同步複製
全同步複製,當主庫提交事務以後,全部的從庫節點必須收到、APPLY 而且提交這些事務,而後主
庫線程才能繼續作後續操做。但缺點是,主庫完成一個事務的時間會被拉長,性能下降。
半同步複製
半同步複製,是介於全同步複製與全異步複製之間的一種,主庫只須要等待至少一個從庫節點收到
而且 Flush Binlog 到 Relay Log 文件便可,主庫不須要等待全部從庫給主庫反饋。同時,這裏只是
一個收到的反饋,而不是已經徹底完成而且提交的反饋,如此,節省了不少時間。
每週 Full,天天 inc,或使用 DG、OGG
expdp/impdp 是服務端程序,影響它速度的只有磁盤 IO。
exp/imp 能夠在服務端,也能夠在客戶端。因此,它受限於網絡和磁盤
採用 direct path 能夠提升導出速度。 因此,在使用 exp 時,就能夠採用直接路徑模式。 這種模式有 2 個相關的參數:
DIRECT 和 RECORDLENGTH 參數。
DIRECT 參數定義了導出是使用直接路徑方式(DIRECT=Y),仍是常規路徑方式(DIRECT=N)。常規路徑導出使用 SQL SELECT
語句從表中抽取數據,直接路徑導出則是將數據直接從磁盤讀到 PGA 再原樣寫入導出文件,從而避免了 SQL 命令處理層的數
據轉換過程,大大提升了導出效率。在數據量大的狀況下,直接路徑導出的效率優點更爲明顯,可比常規方法速度提升三倍之
多。
和 DIRECT=Y 配合使用的是 RECORDLENGTH 參數,它定義了 Export I/O 緩衝的大小,做用相似於常規路徑導出使用的
BUFFER 參數。建議設置 RECORDLENGTH 參數爲最大 I/O 緩衝,即 65535(64kb)。其用法以下:
如:exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
A.DBWR B.LGWR C.SMON D.PMON
A.SGA系統全局區 B.控制文件 C.PMON 後臺進程 D.Dnnn 調度進程
A.sqlnet.ora B.listener.ora C.cman.ora D.tnsnames.ora
A.Open B.close C.fetch Dcursor
A.create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
B.create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
C.create global temporary table temp_cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
D.create table 51cats as select c_name,c_weight from cats where c_weigth >5
A.Open B.close C.fetch D.cursor
A.PDF B.EXE C.TXT D.DMP
A數據緩衝區 B日誌緩衝區 C共享池 D大池
A.DBA 視圖 B.ALL 視圖 C.USER 視圖 D.動態性能視圖
A.表空間 B.段 C.盤區 D.數據塊
A.表空間由段組成,段由盤區組成,盤區由數據塊組成
B.段由表空間組成,表空間由盤區組成,盤區由數據塊組成
C.盤區由數據塊組成,數據塊由段組成,段由表空間組成
D.數據塊由段組成,段由盤區組成,盤區由表空間組成
A.DBWR B.LGWR C.RECO D.ARCH
A數據緩衝區 B日誌緩衝區 C共享池 D大池
A.DBWR B.LGWR C.SMON D.ARCH
A// B\ C- D,
A 、DBA B、SCOTT C、SYSTEM D、SYS
一、startup nomount
這個階段,Oracle 進程讀取初始參數文件,查看 Oracle 數據庫的參數是如何配置的。好比內存
大小配置參數等。讀取參數文件後,與數據庫相關的內存區域被創建起來,同時,後臺進程也已經
開始啓動。咱們把這些內存和進程叫作 Oracle instance,一旦 Oracle Instance 啓動成功,數據庫就進
入了 NoMount 階段。
二、Mount
啓動到這個階段時,會打開和讀取控制文件,控制文件是二進制文件,記錄着 Oracle 的重要
信息,例如,數據文件的路徑等。
這個階段,Oracle 肯定數據文件的位置,可是尚未打開這些文件,一旦數據文件的路徑被定
位後,數據庫開始進入下一階段。
三、Open這個階段,Oracle 會讀取全部的數據文件,而且肯定這些數據文件是一致的(consistent)。
32G
啓動:startup
中止:shutdown immediate
Oracle 備份包括邏輯備份和物理備份。
1.邏輯備份 數據庫的邏輯備份包含讀一個數據庫記錄集和將記錄集寫入文件。
(1)輸出(Export)輸出能夠是整個數據庫、指定用戶或指定表。
(2)輸入(Import)輸入將輸出創建的二進制轉儲文件讀入並執行其命令。
2.物理備份 物理備份包含拷貝構成數據庫的文件而無論其邏輯內容。
Oracle 支持兩種不一樣類型的物理文件備份:脫機備份(offline backup)和聯機備份(online
backup)。
(1) 脫機備份 脫機備份用在當數據庫已正常關閉,數據庫處於"offline"時,要備份下列文件
全部數據文件 全部控制文件
一、調整數據結構的設計。這一部分在開發信息系統以前完成,程序員須要考慮是否使用 ORACLE
數據庫的分區功能,對於常常訪問的數據庫表是否須要創建索引等。
二、調整應用程序結構設計。這一部分也是在開發信息系統以前完成,程序員在這一步須要考慮應用
程序使用什麼樣的體系結構,是使用傳統的 Client/Server 兩層體系結構,仍是使用
Browser/Web/Database 的三層體系結構。不一樣的應用程序體系結構要求的數據庫資源是不一樣的。
三、調整數據庫 SQL 語句。應用程序的執行最終將歸結爲數據庫中的 SQL 語句執行,所以 SQL 語
句的執行效率最終決定了 ORACLE 數據庫的性能。ORACLE 公司推薦使用 ORACLE 語句優化器
(Oracle Optimizer)和行鎖管理器(row-level manager)來調整優化 SQL 語句。
邏輯備份與物理備份。或者冷備份與熱備份。
性能優化、故障修復, RAC,DG,OGG,遷移
官方文檔,MOS 等;性能優化、故障修復, RAC,DG,OGG,遷移
SQL 調優
保存數據的前像,保證數據讀取的時間點一致性。Oracle 裏數據的多版本特性就是經過回滾段來實
現的,正由於此,Oracle 數據庫實現了讀寫不競爭的性能優點!
Alert log files--警報日誌,
Trace files--跟蹤日誌(用戶和進程),
redo log 重作日誌(記錄數據庫的更改)
歸檔 保存 redo
pmon smon dbwr lgwr arch lisner
ORACLE 裏鎖有如下幾種模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表鎖
3:Row-X 行專用(RX):用於行的修改
4:Share 共享鎖(S):阻止其餘 DML 操做
5:S/Row-X 共享行專用(SRX):阻止其餘事務操做
6:exclusive 專用(X):獨立訪問使用
數字越大鎖級別越高, 影響的操做越多。
通常的查詢語句如 select ... from ... ;是小於 2 的鎖, 有時會在 v$locked_object 出現。
select ... from ... for update; 是 2 的鎖。
當對話使用 for update 子串打開一個遊標時,
全部返回集中的數據行都將處於行級(Row-X)獨佔式鎖定,
其餘對象只能查詢這些數據行,不能進行 update、delete 或 select...for update 操做。
insert / update / delete ... ; 是 3 的鎖。
沒有 commit 以前插入一樣的一條記錄會沒有反應,
由於後一個 3 的鎖會一直等待上一個 3 的鎖, 咱們必須釋放掉上一個才能繼續工做。
建立索引的時候也會產生 3,4 級別的鎖。
locked_mode 爲 2,3,4 不影響 DML(insert,delete,update,select)操做,
但 DDL(alter,drop 等)操做會提示 ora-00054 錯誤。
有主外鍵約束時 update / delete ... ; 可能會產生 4,5 的鎖。
DDL 語句時是 6 的鎖。
以 DBA 角色, 查看當前數據庫裏鎖的狀況能夠用以下 SQL 語句:
select object_id,session_id,locked_mode from v$locked_object;
select t2.username,t2.sid,t2.serial#,t2.logon_time
老男孩教育-Linux 學院-微信:lidao996(加上備註)37
from vlockedobjectt1,vsession t2
where t1.session_id=t2.sid order by t2.logon_time;
若是有長期出現的一列,多是沒有釋放的鎖。
咱們能夠用下面 SQL 語句殺掉長期沒有釋放非正常的鎖:
alter system kill session 'sid,serial#';
若是出現了鎖的問題, 某個 DML 操做可能等待好久沒有反應。
當你採用的是直接鏈接數據庫的方式,
也不要用 OS 系統命令 killprocessnum 或者 kill -9 process_num 來終止用戶鏈接,
由於一個用戶進程可能產生一個以上的鎖, 殺 OS 進程並不能完全清除鎖的問題。
記得在數據庫級別用 alter system kill session 'sid,serial#';殺掉不正常的鎖。
DataGuard 有三種模式:
1.最大性能
這是 Data Guard 默認的保護模式。primay 上的事務 commit 前不須要從 standby 上收到反饋信息,該
模式在 primary 故障時可能丟失數據,但 standby 對 primary 的性能影響最小。
2.最大可用
在正常狀況下,最大可用模式和最大保護模式同樣;在 standby 不可用時,最大可用模式會自動降
低成最大性能模式,因此 standby 故障不會致使 primay 不可用。只要至少有一個 standby 可用的狀況
下,即便 primary down 機,也能保證不丟失數據。
3.最大保護
最高級別的保護模式。primay 上的事務在 commit 前必須確認 redo 已經傳遞到至少一個 standby 上,
若是全部 standby 不可用,則 primary 會掛起。該模式能保證零數據丟失, 通常爲保證主庫在某個從
庫故障後仍能正常運行,最好配置兩個及以上的從庫。
熱備份針對歸檔模式的數據庫,在數據庫仍舊處於工做狀態時進行備份。
而冷備份指在數據庫關閉後,進行備份,適用於全部模式的數據庫。
熱備份的優勢在於當備份時,數據庫仍舊能夠被使用而且能夠將數據庫恢復到任意一個時間點。
冷備份的優勢在於它的備份和恢復操做至關簡單,而且因爲冷備份的數據庫能夠工做在非歸檔模式
下,
數據庫性能會比歸檔模式稍好。(由於沒必要將 archive log 寫入硬盤)
SELECT TOP 1 Productname,Price FROM Products ORDER BY Price desc
SELECT Productname,MAX(price) FROM Products
SELECT Productname
A操做系統 B語言處理 C數據庫管理系統 D服務性程序
A.sql B.mdf C.mdb D.ldf
A.Image 數據類型能夠用來存儲圖像 B.使用字符數據類型時,能夠改變長度信息
C.使用數字數據類型時,能夠改變長度信息 D.Bit數據類型爲1位長度,能夠存儲表示是/否的數據
A.DEL B.PRUGE C.DELETE D.DROP
A.MODIFY B.EDIT C.REMAKE D.UPDATE
日誌文件是維護數據庫完整性的重要工具 有的對SQL數據庫的操做都須要寫日誌
當日志文件的空間佔滿時,將沒法寫日誌 當修改數據庫時,必先寫日誌
根據須要授予角色權限
主數據庫文件的擴展名是__mdf___,事務日誌文件的擴展名是__ldf__
設置的,默認爲本機的名字___
一、Windows 身份驗證和 SQL 身份驗證都是數據庫身份驗證的一種,身份驗證是用以識別數據的操
做者身份。無論使用哪一種身份驗證,只要具備數據庫或表的相關權限,那麼都可以對數據庫及表進
行相關的權限範圍以內的增刪查改的操做,所操做後的數據都是相互影響;
二、Windows 身份驗證和 SQL 身份驗證的區別不是權限,由於無論是 Windows 用戶(包括服務器本
地用戶及活動目錄用戶)仍是 SQL 用戶,都須要在 SQL 管理器中進行授予權限後,才能在權限範
圍以內操做。樓上所說的 windows 用戶登陸默認 windows 管理員爲數據庫的管理員,這種說法是錯
誤的,SQL2008 在安裝時,會讓你添加至少一個 SQL 管理員,通常來講都會添加當前的 Windows
用戶爲默認的數據庫管理員,固然也能夠添加其它任何 Windows 用戶做爲數據庫管理員(並非
Windows 管理員就會是數據庫管理員),在此也能夠決定是否啓用 SQL 身份驗證,若是啓用,那麼
則須要爲 SQL 用戶 SA 設置一個密碼。
那麼區別在於,一個使用 SQL 單獨用戶,一個使用 Windows 用戶,使用 Windows 用戶能夠極大的
方便管理員的管理,統一用戶身份驗證(通常使用活動目錄用戶,在實踐環境中,通常企業都會有
本身的活動目錄,若是使用 SQL 用戶的話,管理員則須要記憶和維護兩套用戶名及密碼,在這種情
況下就會使用 Windows 用戶,SQL 能夠直接調用 Windows 用戶並授予數據庫及表相關權限。那麼
在有權限的狀況下,管理員能夠直接使用本身的域用戶來登錄鏈接 SQL 數據庫)
老男孩教育-Linux 學院-微信:lidao996(加上備註)40
老男孩教育-Linux 學院-微信:lidao996(加上備註)
三、只要有相關的權限,所登錄到的數據固然是同樣,前面已經說過,身份驗證是用以識別數據的操
做者身份,那麼無論以何種身份登錄,只要具備相關權限,那麼都可以對數據庫及表進行相關的權
限範圍以內的增刪查改的操做。
1.用下面的語句選出所的表名:
select name from DBName.Sysobjects where xtype='U'
將上面的 DBName 替換成你的數據庫名。
2.經過 Excel 及 UltraEdit 等 工具,把按下面的語句替換 表名 ,生成一系列的修改語句。
增長一個 IDKEY 字段
ALTER TABLE 表名 ADD idkey bigint identity(1,1);
alter table 表名 add constraint pk_表名 primary key (idkey) ;
3.執行這些語句