資料庫高階

2021-10-06 11:45:31 字數 4387 閱讀 4880

create view 檢視名稱 as select語句;
create view v_stu_score_course as 

select

stu.*,cs.courseno,cs.name coursename,sc.score

from

students stu

inner join scores sc on stu.studentno = sc.studentno

inner join courses cs on cs.courseno = sc.courseno

show tables;
drop view 檢視名稱;

例:drop view v_stu_score_course;

select * from v_stu_score_course;
select concat(12,34,'ab');
select length('abc');

select substring('abc123',2,3);

select ltrim('  bar   ');

select lower('abcd');
select round(1.6);
select pow(2,3);
select pi();
select rand();

例1:隨機取一條資料

select * from students order by rand() limit 1;

select current_date();
select current_time();
select now();
%y 獲取年,返回完整年份

%y 獲取年,返回簡寫年份

%m 獲取月,返回月份

%d 獲取日,返回天值

%h 獲取時,返回24進製的小時數

%h 獲取時,返回12進製的小時數

%i 獲取分,返回分鐘數

%s 獲取秒,返回秒數

select date_format('2016-12-21','%y %m %d');
case 值 when 比較值1 then 結果1 when 比較值2 then 結果2 ... else 結果 end

例:select case 1 when 1 then 'one' when 2 then 'two' else 'zero' end as result;

建立

delimiter $$

create function 函式名稱(引數列表) returns 返回型別

begin

sql語句

end$$

delimiter ;

示例

delimiter $$
create function my_trim(str varchar(100)) returns varchar(100)

begin

return ltrim(rtrim(str));

end$$

delimiter ;
使用自定義函式

select '  abc  ',my_trim('   abc   ')

儲存過程,也翻譯為儲存程式,是一條或者多條sql語句的集合

delimiter //

create procedure 儲存過程名稱(引數列表)

begin

sql語句

end//

delimiter ;

delimiter //
create procedure proc_stu()

begin

select * from students;

end//

delimiter ;
call 儲存過程(引數列表);

呼叫儲存過程proc_stu

call proc_stu();

為什麼要有事務

正常的流程走下來,a賬戶扣了500,b賬戶加了500,皆大歡喜。那如果a賬戶扣了錢之後,系統出故障了呢?a白白損失了500,而b也沒有收到本該屬於他的500。以上的案例中,隱藏著乙個前提條件:a扣錢和b加錢,要麼同時成功,要麼同時失敗。事務的需求就在於此

所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。例如,銀行轉帳工作:從乙個帳號扣款並使另乙個帳號增款,這兩個操作要麼都執行,要麼都不執行。所以,應該把他們看成乙個事務。事務是資料庫維護資料一致性的單位,在每個事務結束時,都能保持資料一致性

事務命令

show create table students;

begin;

commit;

rollback;

語法

show index from 表名;
方式一:建表時建立索引

create table create_index(

id int primary key,

name varchar(10) unique,

age int,

key (age)

);

方式二:對於已經存在的表,新增索引

如果指定欄位是字串,需要指定長度,建議長度與定義欄位時的長度一致

字段型別如果不是字串,可以不填寫長度部分

create index 索引名稱 on 表名(欄位名稱(長度))

例:create index age_index on create_index(age);

create index name_index on create_index(name(10));

drop index 索引名稱 on 表名;
建立測試表testindex

create table test_index(title varchar(10));
向表中加入十萬條資料

delimiter //
create procedure proc_test()

begin

declare i int default 0;

while i<100000 do

insert into test_index(title) values(concat('test',i));

set i=i+1;

end while;

end

//

delimiter ;
call proc_test();
查詢

set profiling=1;
select * from test_index where title='test10000';
show profiles;
create index title_index on test_index(title(10));
select * from test_index where title='test10000';
show profiles;
缺點

分析查詢

explain

select * from test_index where title='test10000'

mysql資料庫高階 mysql資料庫高階

一 索引 索引,是資料庫中專門用於幫助使用者快速查詢資料的一種資料結構。類似於字典中的目錄,查詢字典內容時可以根據目錄查詢到資料的存放位置,然後直接獲取即可。分類 普通索引 唯一索引 全文索引 組合索引 主鍵索引 1 普通索引 普通索引僅有乙個功能 加速查詢 建立表時建立索引 create tabl...

資料庫高階

1.預設值 default 值 create table student id int,name varchar 20 address varchar 20 default 江西贛州 預設值 當欄位沒有插入值的時候,mysql自動給該字段分配預設值 注意,預設值的字段允許為空 insert into...

資料庫高階

查詢和更新指令構成了 sql 的 dml 部分 select 從資料庫表中獲取資料 update 更新資料庫表中的資料 delete 從資料庫表中刪除資料 insert into 向資料庫表中插入資料 sql 的資料定義語言 ddl 能建立或刪除 也可以定義索引 鍵 規定表之間的鏈結,以及施加表間的...