`
buerkai
  • 浏览: 167165 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

mysql 基础

 
阅读更多
use test;



------------------------------------------------------------------------------------------------------
-- 外键
/*
drop table classes
create table classes (
classid int constraint pk_class_classid primary key,
name varchar(40),
pid int check(pid>0)
);
insert into classes values (11,'adf',20);

drop table students;
create table students
(
studentid int auto_increment constraint pk_student_studentid primary key,
name varchar(32),
classid int not null,
constraint fk_student_class foreign key (classid) references classes(classid)
);
*/
-- insert into classes values (1,'一年级一班',10);
-- insert into students values (2,'zhangsan',2);

--------------------------------------------------------------------------------------------------------
--创建约束check

/*
create table users (
id int primary key,
name varchar(32),
gender char(1) not null,
constraint check_grender check(gender in ('F','M'))
);

insert into users values(1,'张三','f');
*/
-- 插入空值,会失败。
-- insert into users values(2,'test',null);
--------------------------------------------------------------------------------------------------------
--修改表

/*
--修改表的语法55
alter table <table_name>
{
[add  [column] <column_definion>]|
[add <table_constraint>]|
[alter [column] <column_name>{set default <default_value> | drop default}]|
[drop [column] <column_name> restrict | cascade]|
[drop constraint <constraint_name> restrict | cascade ]
};
*/

--------------------------------------------------------------------------------------------------------
-- 创建索引

/*
create [unique] index <index_name>
on <table_name> (column_name [asc | desc])
*/

-- insert into users values(2,'张三2','f');
-- create index index_users_name on users (name desc);
-- create unique index index_users_name2 on users (name desc);

-- 删除索引
-- drop index users.index_users_name2;
-- 一般不去修改索引,一般是删除了新建,索引会像表一样占用物理存储空间。

/*
创建索引的原则:
1.当数据量很大的时候,查询返回的数据小于总数据量15%的时候,可以加快查询速度,超过了反而会影响查询速度。
2.当表很小的时候,创建所有反而会影响查询速度。
3.经常使用where的字段可以创建索引来增加查询速度。
4.在数据变化很大的列和null很多的列,可创建索引来提高查询速度。

*/
--------------------------------------------------------------------------------------------------------
--视图,视图可以看作虚表,不使用物理空间。其中select不能使用order by ,union


--创建视图
-- create view <view_name> (column_name,....) as <selecte_stament> [with [cascade | local ] check option]

-- 修改视图
-- alter view ...,各个数据修改视图的区别很大,不做介绍。

-- 删除视图
-- drop view <view_name>

-- create view test_view as select u.name from users u where  u.gender='F' ;
-- insert into users values(5,'TEST1','F');

--create view test_view2  as select u.name as bb from users u where u.gender='F';
--drop view test_view2;
--create view test_view3 as select u.name from users u where u.gender='F' with local check option;


--------------------------------------------------------------------------------------------------------
-- 增加数据,
-- insert into <table_name or view_name> [(columns_name,...)] values {( <v> | <expression> | null | default,...) | select_stament};
-- 不能省略字段中不能为空的,不然会抛出异常。

-- 添加视图,必须在相关实表中有数据。
-- insert into test_view(name) values('bbs');

--select * from users where 1=1;

/*
注意事项:
1.使用的列明必须与该列定义的名称匹配,不区分大小写。
2.插入的数值必须与定义的字段数据类型匹配。
3.插入数据的数字范围必须在定义的范围内。
4.插入数值的宽度不能超过定义的宽度。
5.插入的数值必须遵循其约束。
*/
--------------------------------------------------------------------------------------------------------
--更新,如果没有where,那将更新所有的字段。
-- update <table_name or view_name> set {<column_name>=<value> | <expression> | null | default | where <where_stament>}


--------------------------------------------------------------------------------------------------------
-- 删除数据,不会删除表结构
-- delete from <table_name> where <where_stament>

-- delete from users
--------------------------------------------------------------------------------------------------------
-- 查询

/*
select [ distinct ] [ qualifier. ] <column_name,...> | * | <expression> [ as column_alias ],... from <table_name or view_name> | <inline_view > [as <table_alias>]
[where <where_stament>] |
[group by <qualifier. > <column_name>,... [having <having_stament>] ]  |
[order by <column_name> | <column_number> [desc |asc],...]

*/

--select * from classes;


-- 可添加表达式
-- select cc.classid,cc.name,cc.pid, cc.classid * 2 as pid2 from classes cc;

--

/*

比较运算符
1.等于(=) 和不等于(<>);
2.大于(>) 和大于等于(>=);
3.小于(<) 和小于等于(<=);
4.空(is null) 和非空(is not null);
5.模糊查询,like 和 not like,通配符%,_;(%,替换一个字符串),(_,替换一个字符)
*/

select * from classes  cc where cc.name is not null;
select * from classes cc where cc.name like 'a__';

/**
逻辑运算符;
1.or 或
2.and 与
3.not 非
*/


/***
算术运算符:+、-、*、/、%(取模)
*/


/***
集合运算:
1.union 和 union all ,返回2个查询的组合。
2.intersect,返回2个集合共同的行。
3.except,返回第一个集合存在,在第二集合不存在的记录。

*/


/*
select * from classes  union (select * from classes where classid>1);
select * from classes  intersect (select * from classes where classid>1);
select * from classes  except (select * from classes where classid>1);
*/


/*
专用运算符:
1.in,
2.between  ... and ...,包括区间端点。
3.distinct,不重复记录。
4.top,
5.exists,检查子查询中是否有匹配的值的行。

*/

-- select top 3  * from classes;


/***
order by ,
1.一定是 select 的最后一个子句。
2.默认升序。
3.可以在order by 子句中使用列名或表达式。
4.不是必须在select中出现。
*/

-- select * from classes order by pid desc;

/***
group by ,分组查询
*/

/**
having ,对分组出来的数据进行筛选,

*/

--------------------------------------------------------------------------------------------------------
--函数


/*
create function [owner_name.]function_name
([{@param_name [as] scalar_paramer_data_type [=default] },{},..])
returns scalar_return_data_type
[with < function_option> [[,],..]]
[as]
begin
function_body
retrun scalar_expression
end
*/


/*
-- 创建3个数的和
create  function sum_three3(@arg1 int,@arg2 int,@arg3 int)
returns int
as
begin
return (@arg1+@arg2+@arg3)
end
go
*/

-- 删除函数
-- drop function dbo.sum_three2

-- 调用函数
-- select * from person where age > dbo.sum_three2(1,2,3);

--------------------------------------------------------------------------------------------------------
-- 存储过程

/*
create procedure procedure_name
[@param data_type] [output]
[with ](recompile | encryption)
as
sql_statement
*/

/*
drop procedure select_person

create procedure select_person_name
@person_id int,
@param_name varchar(255) output
as
select @param_name=person.name from person where person.id=@person_id;
go
*/

-- 调用存储过程
/*
declare @p_name varchar(255)
execute select_person_name 1,@p_name output
select @p_name as t_name
go
*/

-- 删除存储过程
-- drop procedure select_person_name


--------------------------------------------------------------------------------------------------------
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics