mysql和sqlserver比较

合集下载

mysql 与 sql server 排序规则

mysql 与 sql server 排序规则

mysql 与sql server 排序规则MySQL和SQL Server是两种不同的关系型数据库管理系统(RDBMS),它们在排序规则方面有一些区别。

下面将详细介绍MySQL和SQL Server的排序规则。

1. MySQL的排序规则(Collation):MySQL使用Collation来确定字符串和文本数据的排序规则。

Collation规则由字符集(Character Set)和比较规则(Comparison Rule)组成。

MySQL支持多种字符集和比较规则,其中最常见的是utf8mb4_general_ci。

在utf8mb4_general_ci字符集中,ci表示大小写不敏感,即'A'和'a'被认为是相等的。

MySQL的排序规则基于Unicode字符集,它通过比较字符的Unicode编码值来确定排序顺序。

每个字符在Unicode中都有一个唯一的编码值,比较规则通过比较这些编码值来确定字符的排序位置。

MySQL的排序规则可通过以下方式设置:- 在创建数据库或表时,可以指定特定的字符集和排序规则。

- 可以通过ALTER TABLE语句修改表的字符集和排序规则。

- 可以为查询语句的特定列指定排序规则。

2. SQL Server的排序规则(Collation):SQL Server也使用Collation来确定字符串和文本数据的排序规则。

与MySQL 类似,SQL Server的Collation规则也包括字符集和比较规则。

SQL Server支持多种字符集和比较规则,其中最常见的是SQL_Latin1_General_CP1_CI_AS。

在SQL_Latin1_General_CP1_CI_AS字符集中,CI表示大小写不敏感。

SQL Server的排序规则基于Windows操作系统的本地设置。

它使用Windows 排序规则(Windows Collation)来确定字符的排序顺序。

SQLserver与MySQL语法的区别

SQLserver与MySQL语法的区别

SQLserver与MySQL语法的区别 SQL server与MySQ虽然同样是基于SQL语法的,但它们之间的差异也是不可忽略的。

本博⽂缘由: 在学习《数据库系统概论》⾥⾯使⽤的为SQLsever语法,与最先接触的MySQL部分语法有些许不同。

下⾯是我在做数据库习题与到的⼀些差异。

1、limit语句mysql中SELECT ageFROM personORDER BY age ASCLIMIT 3SQL server中SELECT TOP 3 WITH TIES *FROM personORDER BY age ASC#应⽤-- 从 "Persons" 表中选取 50% 的记录SELECT TOP 50 PERCENT * FROM Persons2、DATEDIFF() 函数mysql中#DATEDIFF() 函数返回两个⽇期之间的天数-- DATEDIFF(date1,date2)SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDateSQL server中#DATEDIFF() 函数返回两个⽇期之间的时间-- DATEDIFF(datepart,startdate,enddate)SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate/*注意:SQL server中的DATEDIFF() 函数等效于mysql中的 TIMESTAMPDIFF() 函数*/-- TIMESTAMPDIFF(unit,begin,end);3、DATE函数mysql中1、NOW() 返回当前的⽇期和时间-- CURDATE() 返回当前的⽇期-- CURTIME() 返回当前的时间2、DATE() 提取⽇期或⽇期/时间表达式的⽇期部分-- EXTRACT(unit FROM date) 返回⽇期/时间按的单独 unit部分3、DATE_FORMAT(date,format) ⽤不同的格式 format显⽰⽇期/时间4、DATEDIFF(date1,date2) 返回两个⽇期之间的天数-- TIMESTAMPDIFF(unit,begin,end); 相当于SQL sever中的DATEDIFF() 函数5、DATE_ADD() 给⽇期添加指定的时间间隔DATE_SUB() 从⽇期减去指定的时间间隔SQL sever中1、GETDATE() 返回当前⽇期和时间2、DATEPART(datepart,date) 返回⽇期/时间的单独 datepart3、CONVERT(data_type(length),data_to_be_converted,style) ⽤不同的格式 style显⽰⽇期/时间4、DATEDIFF(datepart,startdate,enddate) 返回两个⽇期之间的时间5、DATEADD() 在⽇期中添加或减去指定的时间间隔4、百分⽐约束例:查询课程表中的前30%的记录。

数据库管理系统比较MySQLvsOraclevsSQLServer

数据库管理系统比较MySQLvsOraclevsSQLServer

数据库管理系统比较MySQLvsOraclevsSQLServer 数据库管理系统比较:MySQL vs Oracle vs SQL Server引言:数据库管理系统是现代信息技术领域中不可或缺的一环。

随着数据量的急剧增加和数据库应用的广泛应用,选择适合自己需求的数据库管理系统变得至关重要。

在本文中,我们将比较三种常见的数据库管理系统:MySQL、Oracle和SQL Server。

通过对比它们的性能、功能、可扩展性和使用成本,为读者提供一个更好地了解和选择的依据。

一、性能比较在数据库管理系统中,性能是一个至关重要的因素。

下面将对MySQL、Oracle和SQL Server的性能进行比较。

1.1 MySQL性能MySQL是一个轻量级的开源数据库管理系统,以其高性能而闻名。

它采用多线程处理机制和高效的索引算法,能够处理大规模的数据访问和高并发请求。

此外,MySQL还支持垂直和水平扩展,可根据实际需求进行灵活配置和调整。

因此,在对于大多数中小型应用来说,MySQL提供了相对较好的性能。

1.2 Oracle性能Oracle是一个功能强大且成熟的商业数据库管理系统。

它具有出色的性能,并且能够处理大规模的复杂数据模型。

Oracle采用了先进的事务处理机制和高效的查询优化算法,使其在处理高并发访问和复杂查询时具有出色的性能表现。

然而,Oracle的性能和功能也伴随着更高的硬件要求和许可成本。

1.3 SQL Server性能SQL Server是由微软公司开发的关系型数据库管理系统。

它在处理大规模数据时表现出色,并且支持高并发访问和复杂查询。

SQL Server 采用了先进的内存管理和缓存技术,以提高查询速度和响应时间。

此外,SQL Server还具有良好的稳定性和可靠性,适用于中小型企业的应用场景。

综合比较,MySQL适用于中小型应用,对性能要求较高且成本敏感的场景;Oracle适用于大规模企业级应用,对功能和可靠性要求较高的场景;SQL Server适用于中小型企业应用,对性能和稳定性要求较高的场景。

SQL server与mysql的区别

SQL server与mysql的区别

1、执行符号:①mysql:分号“;”②SQL server:字符“go”2、自增列:mysql必须要索引,不能设置增量3、默认值①mysql默认值不用加括号②SQL server可加可不加4、查看表结构定义:①SQL server:exec sp_help ‘tabname’②mysql:desc tabname5、更改表名:①mysql:alter table tabName rename newTabName②SQL server:exec sys.sp_rename @objname=N’tabn a me’,@newname=’newTabName’6、更改字段类型:①SQL server:alter table[dbo].[tabName] alter column [id] bigint②mysql:alter table tabName modify id bigint7、更改字段名:①SQL server:exec sys.sp_rename@objname=N’tabName.id’,@newname=’lewid’,@objtype=’column’②mysql:alter table tabName change idlew Id bigint8、添加字段:①SQL server:ALTER TABLE[dbo].[tabName] ADD NAME NVARCHAR(200) NULL②mysqlALTER TABLE tabName ADD NAME NVARCHAR(200) NULL、9、删除字段:①SQL server:ALTER TABLE[dbo].[tabName]DROP COLUMN NAME②mysqlALTER TABLE tabName DROP NAME10、添加主键/外键或约束:①SQL serverALTER TABLE[dbo].[tabName] DROP CONSTRAINT pk_tabName②mysqlALTER TABLE tabName DROP CONSTRAINT constaintNameALTER TABLE tabName DROP PRIMARY KEY pk_tabNameALTER TABLE subTabName DROP FOREIGN KEY fk_subTabName_tabName11、删除表:①SQL serverDROP TABLE tabName , TabName2;②mysqlDROP TABLE IF EXISTS tabName , TabName2;12、创建视图:①mysqlCREATE OR REPLACE VIEW VtabNameASSELECT* FROM tabNameWITH CHECK OPTION;②SQL serverCREATE VIEW VtabNameASSELECT* FROM tabNameWITH CHECK OPTION;13、视图结构和定义:①mysqlDESC VtabName;SHOW CREATE VIEW VtabName;SHOW TABLE STATUS LIKE'VtabName';②SQL serversp_help VtabNamesp_helptext VtabName14、删除视图:①mysqlDROP VIEW tabName;DROP VIEW IF EXISTS tabName;②SQL serverDROP VIEW tabName;15、创建索引:①mysqlCREATE TABLE tabName(id INT NOT NULL,KEY indName(id));ALTER TABLE tabName ADD INDEX indName(Value);CREATE UNIQUE INDEX indName ON tabName(Value);②SQL serverCREATE TABLE tabName(ID INTIDENTITY(100,1) CONSTRAINT PK_tabName PRIMARY KEY)CREATE UNIQUE INDEX indName ON tabName(Value);16、重建索引:①mysqlREPAIR TABLE tabName QUICK;②SQL serverDBCC DBREINDEX('dbo.tabName','',100)ALTER INDEX indName ON tabName REBUILD;ALTER INDEX ALL ON tabName REORGANIZE;17、删除索引:①mysqlALTER TABLE tabName DROP INDEX indName;ALTER TABLE tabName DROP PRIMARY KEY pk_tabName;ALTER TABLE subTabName DROP FOREIGN KEY fk_subTabName_tabName; DROP INDEX indName ON tabName;②SQL serverDROP INDEX indName ON tabName;ALTER TABLE tabName DROP CONSTRAINT PK_tabName18、查看索引:①mysqlSHOW INDEX FROM tabName;②SQL serverSELECT* FROM sys.indexes WHERE object_id =OBJECT_ID('tabName') SELECT*FROM sys.sysindexes WHERE id=OBJECT_ID('tabName')19、查看存储过程/函数定义:①mysqlSHOW CREATE{PROCEDURE|FUNCTION}name;SHOW{PROCEDURE|FUNCTION}STATUS[ LIKE 'pattern'];SELECT*FROM information_schema.Routines WHEREROUTINE_NAME='name';②SQL serverexec sp_help f_getdateexec sp_helptext f_getdateSELECT*FROM information_schema.Routines WHEREROUTINE_NAME='name';20、存储过程:①mysqlDELIMITER//CREATE PROCEDURE sp_name(IN param1INT,OUT param2 INT)BEGIN{sql_statement}END//DELIMITER;CALL sp_name();DROP PROCEDURE IF EXISTS sp_name;②SQL serverCREATE PROCEDURE sp_name(@param1 INT,@param2 INT OUTPUT) ASBEGIN{sql_statement}ENDGOEXEC sp_name();DROP PROCEDURE sp_name;21、函数:①mysqlDELIMITER//CREATE FUNCTION fn_name()RETURNS Decimal(10,2)RETURN 3.14;//DELIMITER;SELECT fn_name();DROP PROCEDURE IF EXISTS fn_name;②SQL serverCREATE FUNCTION dbo.fn_name()RETURNS Decimal(10,2)ASBEGINRETURN 3.14ENDGOSELECT dbo.fn_name();DROP FUNCTION dbo.fn_name;22、触发器:①mysqlDELIMITER//CREATE TRIGGER tr_name{AFTER|BEFORE}{INSERT|UPDATE|DELETE} ON tabNameFOR EACH ROWBEGIN{sql_statement;}ENDDELIMITER;DROP TRIGGER IF EXISTS tr_name;②SQL serverCREATE TRIGGER dbo.tr_nameON[dbo].[tabName]{FOR|AFTER|INSTEAD OF}{INSERT|UPDATE|DELETE} ASBEGIN{sql_statement;}ENDGODROP TRIGGER dbo.tr_name23、循环语句:①mysql(1至100之和)WHILE 循环:DELIMITER//CREATE PROCEDURE TESTPRO()BEGINDECLARE I,K INT DEFAULT 0 ;WHILE I<= 100 DOSET K=I+K;SET I=I+ 1;END WHILE;SELECT K;END;//DELIMITER;REPEAT UNTIL 循环:DELIMITER//CREATE PROCEDURE TESTPRO() BEGINDECLARE I,K INTDEFAULT 0 ; REPEATSET K=I+K;SET I=I+ 1;UNTIL I>100END REPEAT;SELECT K;END;//DELIMITER;LOOP 循环:DELIMITER//CREATE PROCEDURE TESTPRO() BEGINDECLARE I,K INTDEFAULT 0 ; LABEL:LOOPSET K=I+K;SET I=I+ 1;IF I>100 THENLEAVE LABEL;END IF;END LOOP;SELECT K;END;//DELIMITER;CALL TESTPRO();DROP PROCEDURE IF EXISTS TESTPRO;②SQL serverDECLARE@I INT= 1DECLARE@K INT= 0WHILE@I<= 100BEGINSET@K=@K+@ISET@I=@I+ 1ENDSELECT@K24、游标:①mysql(参数名称不能与列明一样)DELIMITER//CREATE PROCEDURE TESTPRO()BEGINDECLARE FName varchar(50);DECLARE LName varchar(50);DECLARE IsDone BOOLEAN DEFAULT FALSE;DECLARE cursor_name CURSOR FOR SELECT FirstName,LastName FROM Person; DECLARE CONTINUE HANDLER FOR NOT FOUND SET IsDone=TRUE;OPEN cursor_name;LABEL:LOOPFETCH cursor_name INTO FName,LName;IF IsDone THENLEAVE LABEL;END IF;SELECT CONCAT('Contact Name:',FName,LName)AS Name;END LOOP;CLOSE cursor_name;END;//DELIMITER;②SQL serverDECLARE@LastName varchar(50),@FirstName varchar(50);DECLARE contact_cursor CURSOR FOR SELECT LastName,FirstName FROM PersonOPEN contact_cursor;FETCH NEXT FROM contact_cursor INTO @LastName,@FirstName; WHILE@@FETCH_STATUS= 0BEGINSELECT'Contact Name: '+@FirstName+' '+@LastNameFETCH NEXT FROM contact_cursor INTO @LastName,@FirstName; ENDCLOSE contact_cursor;DEALLOCATE contact_cursor;GO25、查看账户信息:①mysqlselect Host,User,Password from er;show grants for 'username' @'localhost';②SQL serverselect*from sys.sysloginsselect*from sys.sysusers where is sqluser= 126、添加账户:①mysql(insert into er 默认禁止,去掉my.init\sql-mode\STRICT_TRANS_TABLES)CREATE USER'username'@'localhost'IDENTIFIED BY 'password'; INSERT INTO er (Host,User,Password)VALUES ('localhost','username',PASSWORD('password'));②SQL serverUSE[master]GOCREATE LOGIN [username] WITH PASSWORD=N'password',CHECK_POLICY=OFF GOUSE[YourDatabase]GOCREATE USER[username]FORLOGIN[username]GO26、更改密码:①mysqlmysqladmin-uusername-p123456password 654321set password=password("kk");set password for 'username' @'localhost'=password('123456');update er set Password=PASSWORD('123456') WHEREuser='username';flush privileges;②SQL serverALTER LOGIN[username]WITH PASSWORD=N'123456'sp_password@new='123456',@loginame='username',@old ='old_password'27、授权和回收权限:(SqlServer服务器角色和数据库角色相关操作)①mysqlGRANT SELECT on *.*to'username'@'localhost'identified by'password';REVOKE all privileges,grant option FROM 'username' @'localhost';②SQL serverUSE[master]GRANT CONNECTSQLTO[username]REVOKE CONNECTSQLTO[username]EXEC master..sp_addsrvrolemember @loginame=N'username',@rolename= N'sysadmin'EXEC master..sp_dropsrvrolemember@loginame=N'username',@rolename=N'sysadmin'GOUSE[YourDatabase]GRANT INSERT,UPDATE,DELETE,SELECTON[dbo].[TestTab]TO[username]REVOKE INSERT,UPDATE,DELETE,SELECTON[dbo].[TestTab]TO[username]EXEC sp_addrolemember N'db_owner',N'username'EXEC sp_droprolemember N'db_owner',N'username'GO28、删除账户:①mysqlDROP user'username'@'localhost';DELETE FROM er WHERE user='username';②SQL serverUSE[master]GODROP LOGIN [TUser]sp_droplogin@loginame='username'GOUSE[YourDatabase]GODROP USER[TUser]sp_dropuser@name_in_db='username'GO。

sqlserver和mysql命令(语句)的区别,sqlserver与mysql的比较

sqlserver和mysql命令(语句)的区别,sqlserver与mysql的比较

sqlserver和mysql命令(语句)的区别,sqlserver与mysql的⽐较sql与mysql的⽐较1、连接字符串sql :Initial Catalog(database)=x; --数据库名称Data Source(source)=x; --服务器Persist Security Info=True; --集成sql server⾝份验证Integrated Security=True --集成windows⾝份验证User ID(uid)=x; --⽤户名Password(pwb)=x; --密码mysql:Database=x; --数据库名称Data Source=x; --服务器User Id(uid)=bizhi; --⽤户名Password=x; --密码pooling=false; --CharSet=utf8; --编码port=x --端⼝2、连接对象sql :SqlConnectionmysql:MySqlConnection3、命令:sql :SqlCommandmysql:MySqlCommand4、参数sql :SqlParametermysql:MySqlParameter5、填充:sql :SqlDataAdaptermysql:MySqlDataAdapter6、查询所有库sql :select * from [master]..[SysDatabases];mysql:SHOW DATABASES;7、显⽰指定库的所有表sql :select * from [_DatatBaseName]..[SysObjects] where [type]='U';mysql:USE _DatatBaseName; SHOW TABLES;8、显⽰指定库的指定表的所有字段sql :select top 0 * from [_DatatBaseName]..[_TableName];select * from [syscolumns] where [ID]=OBJECT_ID('BPM..OrderFollow');mysql:USE _DatatBaseName; SHOW COLUMNS FROM _TableName;USE _DatatBaseName; DESCRIBE _TableName;9、查询当前时间sql :select getdate();mysql:SELECT NOW();10、备份数据库sql :backup _DatatBaseName to disk='d:\123.bak';mysql:11、创建数据库sql :use mastergo--删除数据库if exists(select * from sysdatabases where name='kl') drop database [HBDataBase]; --删除go--创建数据库create database [kl]on --主⽂件(name='kl',size=3mb,filename='D:\kl.mdf',maxsize=100mb,filegrowth=1mb)log on --⽇志⽂件(name='kl_Log',filename='D:\kl.ldf',size=1mb,maxsize=5mb,filegrowth=5%)gomysql:CREATE DATABASE _DatatBaseName;12、分页sql :top NROW_NUMBER() over(order by xx desc ) mysql:limit13、添加的⾃增列sql :insert into xx(bb) output inserted.vv vlaues('');select @@identity;mysql:SELECT @@session.identity;。

MySQL、Oracle、SqlServer三种数据库的优缺点

MySQL、Oracle、SqlServer三种数据库的优缺点

MySQL、Oracle‎、SqlSer‎ver三种数‎据库的优缺点‎这篇文章主要‎介绍了sql‎s erver‎、Mysql、Oracle‎三种数据库的‎优缺点总结,需要的朋友可‎以参考下。

一、sqlser‎v er优点:易用性、适合分布式组‎织的可伸缩性‎、用于决策支持‎的数据仓库功‎能、与许多其他服‎务器软件紧密‎关联的集成性‎、良好的性价比‎等;为数据管理与‎分析带来了灵‎活性,允许单位在快‎速变化的环境‎中从容响应,从而获得竞争‎优势。

从数据管理和‎分析角度看,将原始数据转‎化为商业智能‎和充分利用W‎e b带来的机‎会非常重要。

作为一个完备‎的数据库和数‎据分析包,SQLSer‎v er为快速‎开发新一代企‎业级商业应用‎程序、为企业赢得核‎心竞争优势打‎开了胜利之门‎。

作为重要的基‎准测试可伸缩‎性和速度奖的‎记录保持者,SQLSer‎v er是一个‎具备完全We‎b支持的数据‎库产品,提供了对可扩‎展标记语言 (XML)的核心支持以‎及在Inte‎r net上和‎防火墙外进行‎查询的能力;缺点:开放性:SQL Server‎只能wind‎o ws上运行‎没有丝毫开放‎性操作系统系‎统稳定对数据‎库十分重要W‎indows‎9X系列产品‎偏重于桌面应‎用NT server‎只适合小型企‎业而且win‎d ows平台‎靠性安全性和‎伸缩性非常有‎限象unix‎样久经考验尤‎其处理大数据‎库;伸缩性并行性‎:S QL server‎并行实施和共‎存模型并成熟‎难处理日益增‎多用户数和数‎据卷伸缩性有‎限;安全性:没有获得任何‎安全证书。

性能:SQL Server‎多用户时性能‎佳;客户端支持及‎应用模式:客户端支持及‎应用模式。

只支持C/S模式,SQL Server‎ C/S结构只支持‎w indow‎s客户用AD‎O、DAO、OLEDB、ODBC连接‎;使用风险:SQL server‎完全重写代码‎经历了长期测‎试断延迟许多‎功能需要时间‎来证明并十分‎兼容;二、Oracle‎优点:开放性:Oracle‎能所有主流平‎台上运行(包括 window‎s)完全支持所有‎工业标准采用‎完全开放策略‎使客户选择适‎合解决方案对‎开发商全力支‎持;可伸缩性,并行性:Oracle‎并行服务器通‎过使组结点共‎享同簇工作来‎扩展wind‎o wnt能力‎提供高用性和‎高伸缩性簇解‎决方案win‎d owsNT‎能满足需要用‎户把数据库移‎U NIXOr‎a c le并行‎服务器对各种‎U NIX平台‎集群机制都有‎着相当高集成‎度;安全性:获得最高认证‎级别的ISO‎标准认证。

SQLServer与MySql区别(关键字和语法)

SQL Server 和MySql 语法和关键字的区别——用于SQLServer到MySql的转换(1)mysql的ifnull()函数对应sql的isnull()函数;(2)mysql的存储过程中变量的定义去掉@;(3)mysql的每句结束要用";"(4)SQLServer存储过程的AS在MySql中需要用begin .....end替换(5)字符串连接用concat()函数;如SQLServer: Temp=’select * from ’+’tablename’+…+…MySql:Temp=concat(’select * from’, ’tablecname’,…,…)(6)mysql的uuid()对应sql的GUID();(7)MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面MySql out,in,inout的区别——MySQL 存储过程“in”参数:跟C 语言的函数参数的值传递类似,MySQL 存储过程内部可能会修改此参数,但对in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。

MySQL 存储过程“out”参数:从存储过程内部传值给调用者。

在存储过程内部,该参数初始值为null,无论调用者是否给存储过程参数设置值。

MySQL 存储过程inout 参数跟out 类似,都可以从存储过程内部传值给调用者。

不同的是:调用者还可以通过inout 参数传递值给存储过程。

(8)MySQL的if语句为if (条件) thenend if;或者If (条件) thenElseEnd if或者If(条件)thenElseif (注意不能写成Else if )Elseif…End if(9)Mysql的Execute对应SqlServer的exec;(注意:必须像下面这样调用)Set @cnt=’select * from 表名’;Prepare str from @cnt;Execute str;(10)MySql存储过程调用其他存储过程用callCall函数名(即SQLServer的存储过程名)(’参数1’,’参数2’,……)(11) mysql的日期○1获得当前日期函数:curdate(),current_date()○2获得当前时间函数:curtime();○3获得当前日期+时间:now();○4MySQL dayof... 函数:dayofweek(), dayofmonth(), dayofyear()分别返回日期参数,在一周、一月、一年中的位置。

MySQL和SqlServer的区别

MySQL和SqlServer的区别⼀、查看表结构数量等mysql语句:-- 查看系统内所有数据库show databases;-- 查询数据库内所有表show tables;-- 显⽰表结构desc表名;sql server语句:-- 查看系统内所有数据库SELECT name, database_id, create_date FROM sys.databases ;-- 查询数据库内所有表select* from sysobjects where xtype= 'U';-- 显⽰表结构sp_help orderssp_columns orders⼆、查询前⼏条记录查询前10条记录:mysql语句:select* from student limit 10;sql server语句:select top10 * from student;三、获取当前时间mysql语句:now()sql server语句:getdate()四、使⽤表全限定名mysql语句:select password from ers where userName='boss'sql server语句:select password from ers where userName='boss'或者select password from ers where userName='boss'五、⾃增字段设置mysql语句:id int primary key auto_incrementsql server语句:id int primary key identity(1,1)六、⽇期时间格式转换⽅式INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,cast('1980-12-17'as datetime ),800,NULL,20); //sql servers和mysql都可⽤,⽽且mysql还可以直接⽤'1980-12-17';INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,convert(datetime,'1981-2-20',110),1600,300,30); //sql server可⽤,但mysql不可⽤INSERT INTO emp VALUES (7935,'MILLER','CLERK',7782,convert(nvarchar,getdate(),120),1300,NULL,10);//sql server可⽤,但mysql不可⽤七、修改字段的数据类型mysql语句:alter table test2 modify id bigint;sql server语句:alter table emp alter column[id] bigint⼋、约束类型mysql常⽤的⼏种约束:⾮空约束(not null)唯⼀性约束(unique)主键约束(primary key) PK外键约束(foreign key) FK默认值(default)检查约束(⽬前MySQL不⽀持、Oracle⽀持)sql server常⽤的⼏种约束:⾮空约束主键约束(PK) Primary key唯⼀约束(UQ) Unique默认约束(DF) Default外键约束(FK) Foreign key检查约束(CK) Check九、对枚举字段的处理mysql语句:create table t1(id int primary key auto_increment,name varchar(16) not null,sex enum('male','female') not null default'male');sql server语句:CREATE TABLE Users(id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,name NVARCHAR(50) NOT NULL,sex NVARCHAR(2) CHECK(sex='男'OR sex='⼥'))或者:ALTER TABLE ersADD CONSTRAINT CK_UserSex CHECK(Gender='男'OR Gender='⼥')⼗、 MySQL不⽀持默认值为当前时间的datetime类型(MS SQL很容易做到),在MySQL⾥⾯是⽤timestamp类型⼗⼀、MySQL创建⾮聚集索引只需要在创建表的时候指定为key就⾏,⽐如:KEY displayorder (fid,displayorder) 在MS SQL⾥⾯必须要:create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers (username asc,appid asc)。

SQLServerMySqlOracle语法对比及区别

SQLServerMySqlOracle语法对⽐及区别操作SQLServer Oracle Mysql查看表结构exec sp_help 表名desc 表名在command window看desc 表名或 describe 表名或show columns from 表名;修改数据库名称exec sp_renamedb ‘旧数据库名’,’新数据库名’不详修改表名exec sp_rename ‘旧表明’,’新表明’rename 旧表名 to 新表名alter table 表名 rename to 新表名修改列名exec sp_rename ‘表.旧列名’,’新列名’alter table 表名 rename column 旧列名 to 新列名alter table test change column address address1 varchar(30)--修改表列名删除数据库drop database 数据库名不详Drop database添加表中⼀列alter table 表名 Add 列名数据库类型alter table 表明 add(列名数据类型) 或alter table 表名 Add 列名数据库类型alter table test add column name varchar(10); --添加表列删除表中⼀列alter table 表名 drop column 列名alter table 表名 drop column 列名alter table test drop column name;修改表现有列alter table 表名 alter column 列名新数据库类型⼤⼩alter table 表明 modify(列名数据类型)alter table test modify address char(10) --修改表列类型||alter table test change address address char(40)删除约束alter table 表名 drop constraint约束名完全⼀样添加主键约束alter table 表名add constraint 主键约束名primary key (列名)完全⼀样alter table 表明add primary key (列名)删除主键约束alter table 表名 drop primary key添加唯⼀约束alter table 表名add constraint 唯⼀约束名unique (列名)完全⼀样alter table 表名 add unique (列名)添加默认约束alter table 表名add constraint default (值) for 列名完全⼀样添加检查约束alter table 表名add constraint check (列名 > 10)完全⼀样添加外键约束alter table ⼦表add constraint 外键约束名foreign key(⼦表的列名) references 主表 (列名)on update cascade / on updateaction注意:默认和加 on update action 表⽰更新受限加on update cascade 表⽰更新不受限,多项操作时⽤逗号隔开完全⼀样添加索引约束alter table 表名 add index 索引名 (列名)添加普通索引:create index 索引名 ON 表名 (列名)添加唯⼀索引:create unique索引名 ON 表名 (列名)删除索引drop index 索引名 on 表名alter table 表名 drop index 索引名⾝份: exec sp_grantlog域名\密码’⾝份: exec sp_addlogin ‘登陆’,’密码’SET PASSWORD FOR'username'@'host'= PASSWORD('newpassword');数据库名⾝份: Exec域名密码’,’数据库⽤户名’⾝份: Exec sp_grantdbaccess登陆帐户’,’数据库⽤户名’create user HDEAM_TYMBidentified by ""default tablespace HDEAM_TYMBtemporary tablespace TEMPprofile DEFAULT;mysql>insert intoer(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values("localhost","pppadmin",password("passwd"),'','','');CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY'123456';CREATE USER 'pig'@'%' IDENTIFIED BY '123456';CREATE USER 'pig'@'%' IDENTIFIED BY '';CREATE USER 'pig'@'%';权限 [on 表明] to 数据库grant dba to HDEAM_TYMB with admin option;-- Grant/Revoke system privilegesgrant unlimited tablespace to HDEAM_TYMBwith admin option;“abc”;grant all privileges on phplampDB.* to phplamp@localhostidentified by '1234';mysql>flush privileges;权限 [on 表名] from 数据REVOKE SELECT ON*.* FROM'pig'@'%';数据库’drop user HDEAM_SBFF cascade;mysql>Delete FROM user Where User="phplamp" andHost="localhost";mysql>flush privileges;⾝份: exec sp_droplogin⾝份: exec sp_revokelogin 登分离数据库:数据库名附加数据库:数据库名,主数据⽂件路径’,⽇志⽂件路径’exp hdeam_product/d3B68Apk29v34Dj@orclfile=E:/tymb.dmp log=E:/tymb.logimp HDEAM_LHSH/HDEAM_LHSH@orcldevfile=E:\TYMBHDEAM_BAK_2013-03-25.dmpfull=Y;mysqldump -h localhost -u root -pmysql oa >d:\oa.sqlmysql -h localhost -u root -p jira<d:\jira.sql:Select *select * from表)Exec Sp_helpExecExec数据库名exec表名exec sp_helpindex注意: 下⾯都是通过( select * from 对象 ) 来查看信息触发器 user_triggers过程 user_procedures查看源代码 user_source查看数据库对象 user_objects查看错误信息 show errors查看索引信息 user_indexes查看分区索引 user_ind_partitions查看有关基于列创建的索引 user_ind_columns查看表空间 -- user_tablespaces查看所有数据库 show databases;查看库所有表 show tables;查看表结构和属性use information_schema;select * from columns where table_name=’表名’查看表源代码show create table 表名;查看存储过程源代show create procedure 过程名查看视图源代码show create procedure 过程名查看视图资代码show create VIEW 视图名查看表的索引show index from 表名查看表的索引show keys from 表明表储蓄过/空过程,函数,视图,表的源代码:对象名::查看序列 -- user_sequences查看同义词 -- user_ind_columns查看⽤户表信息 -- user_tables查看⽤户所有的表信息 user_all_tables查看表的索引show keys from 表明sysdate NOW()varchar2(20)不⼀定要指定具体列名必须指定具体列名标识的开始值, 标识种右)create sequence 序列名1.序列名.nextval 获取下⼀个序列的值2.序列名.currval 获取当前的序列的值: *.mdf =1 :*.ndf >=0 : *.log >=1数据⽂件: *.dbf >=1⽇志⽂件: *.log >=11位置开始查找t字符串(默认从1开始)从pos位置len获取字符串的长度把字符串全部转换成把字符串全部转换成清除左边的空格清楚右边的空格从左边返回指定长度的从右边返回指定长度将s t替换成字符串我的⾳乐我’)A我的⾳乐我的世界EFG2位置开3的字符串,并在该位置索引从1开始substr(char, pos, len) 截取字符串length(char) 返回字符串的长度lower(char) 转换为⼩写upper(char) 转换为⼤写trim() 截取左右空格initcap(char) ⾸字母⼤写ltrim(char,set) 左剪裁rtrim(char,set) 右剪裁replace(char oldchar, newchar) 字符串替换concat(char1, char2) 连接字符串cha(67) 根据ASCII码返回对应的字符lpad()和rpad() 在字符串的左边或右边添加东西需要3个参数第⼀个是字符串第⼆个是返回值的总长度, 第三个是⽤来填充的字符值 as varchar) 不需指定长度to_char(d|n, fmt)将数字或⽇期转换为指定格式的值 as varchar) 不需指定长度值) 必须指to_char(d|n, fmt)将数字或⽇期转换为指定格式的字符串to_date(char,frm)将char 或varchar 转换为⽇期数据类型to_number() 将包含数字的字符转换为number数据类型取绝对值取上界最⼩整取下界最⼤整数取幂四舍五⼊,正数返回1 ,负数返-1求平⽅根获取计算机名称nvl(ex1,ex2)如果ex1为null则返回ex2;如果ex1不为null则返回ex1;nvl2(ex1,ex2,ex3)如果ex1不为null则返回ex2如果ex1为null则返回ex3nullif(ex1,ex2)如果ex1=ex2则返回null 否则返回ex1;聚合)列名) 求这列的平均值列名) 求这列的最⼩值列名) 求这列的最⼤值统计所有的⾏包括重复列名) 统计指定列中⾮空值列名) 统计不是重复右句⽤于将信息表划分,按组进⾏聚合运算avg(列名) 求这列的平均值min(列名) 求这列的最⼩值max(列名) 求这列的最⼤值count(*) 统计所有的⾏包括重复值和空值count(列名) 统计指定列中⾮空值的个数count(distinct 列名) 统计不是重复值的个数group by右句⽤于将信息表划分为组,按组进⾏聚合运算返回当前系统时间返回指+指定部分后的⽇期返回返回指a. add_months(d,n) 返回给指定的⽇期加上指定的⽉数后的⽇期值 selectadd_months(sysdate,2) from dual;b. months_between(d,d) 返回2个⽇期之间的⽉数select months_between (date '2005-05-06',date '2005-9-01') from dual;c. last_day(d) 返回指定⽇期当⽉的最后⼀天的⽇期select last_day(sysdate) from dual;d. round(d, [fmt]) 返回⽇期值⽇期四舍五⼊为格式模型指定的单位 select round(date'2005-09-08','year') from dual; 返回 2005-01-01 selectround(date'2005-09-08','month') from dual; 返回2005-09-01 select round(date'2005-09-08','day')from dual; 返回最靠近的⼀个星期⽇e. next_day(d, day) 返回指定的下⼀个星期⼏的⽇期 select next_day(sysdate,'星期⼆') fromdualf.trunc 语法与round 相同区别:trunc 是只舍不⼊g.extract 提取⽇期时间类型中的特定部分|| 连接字符串⽤于将2个或多个字符串合并成⼀个字符串两个)重复的⾏select orderno from order_master union select orderno from order_detail;b.union all 合并2个查询选定的所有⾏包括重复的⾏c.intersect 返回2个查询都有的⾏d.minus 第1个查询在第2个查询中不存在的数据)个,⾄n-个条)::对1 :)左别名.列名,右别名.列from 左表 as 左别名 inner右表 as 右别名on 左别名.列= 右别名.列名左表名.列名,右表名.列from 左表 ,右表 where 左表.列名 = 右表名.列名左外连接:(返回左表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由左表决定)左别名.列名,右别名.列名左表 as 左别名 left join 右as 右别名on 左别名.列名 = 右.列名右外连接:(返回右表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由右表决定)左别名.列名,右别名.列名左表 as 左别名 right join右表 as 右别名on 左别名.列名 =完全⼀样连接分类:1内连接:条件2外连接1)左外连接: left join 或 left outer join2)右外连接:right join 或 right outer join3)完整外连接: Full join 或 Full outer join3交叉连接: from …4. 交叉连接:(返回左右表的所有⾏,如果左表没有与右表匹配的⾏则全部⽤null代替,如果右表没有与左表匹配的⾏则全部⽤null代替,存在则显⽰具体数据,显⽰出来的总⾏数=左表和右表⾏数和决定)Select 左别名.列名,右别名.列名 from 左表 as左别名 right join 右表 as 右别名on 左别名.列名= 右别名.列名完全拷贝: insert into ⽬标表源表部分拷贝: insert into ⽬标表 (列) select 列名 from 源表表不存完全拷贝: select * into 新表源表部分拷贝: select 列名 into 新from 源表拷贝表结构: select * into 新表源表 Where 1=2emp;b.拷贝⼀部分create table temp as select 列1,列2 from 表c.只拷贝⼀个空表(根据⼀个假条件)create table temp as select * from 表 where 1=2d.使⽤列别名: select stu_id, stu_name as "学⽣姓名" from student;A表,B1:⽬标表 set 列 = a.列 froma where a.关联列 = ⽬标表.2:列 = a.列 from 源a , ⽬标表b where a.关联列 =关联列3:⽬标表 set 列 = a.列 froma , ⽬标表b where a.关联列关联列4:⽬标表 set ⽬标表.列 = a.from 源表 a , ⽬标表 b where关联列 = b.关联列5:⽬标表 set⽬标表.列 = a.from 源表 a where a.关联列 =update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列from 源表 a where a.关联列 = .关联列6:update语创建⼀个新表修改表中的列表名 alter column 列新数据库类型⼤⼩添加表中的列表名 Add 列名数据库删除表中的列表名 drop column 列删除表中的记录⽽不删除表的truncate table student只是查看表的结构删除表中的数据及表的结构a.创建⼀个新表create table student(stu_id int, stu_name varchar2(20)) tablespace lijiaob.修改表中的列alter table student modify(stu_name varchar2(40))c.添加表中的列alter table student add(stu_age int)d.删除表中的列alter table student drop column stu_agee.删除表中的记录⽽不删除表的结构truncate table studentf.只是查看表的结构desc studentg.删除表中的数据及表的结构drop table student;:.必须)a. commit 命令(⽤于提交并结束事务处理)commitb.savepoint 保存点类似于标记它将很长的事务处理划分为较⼩的部分他们⽤来标记事务中可以应⽤回滚的点save point savepoint_idc.rollbace work ,rollbackd.回滚到某个保存点rollback to savepoint伪列,但a.rowid(可以唯⼀的标识数据库中的⼀⾏)b.rownum (代表⾏的序号)rownum 不跟> , = , >= 操作使⽤储在,)变量名 = 值变量名 = 列名 from 表明列名 =⽤户)最后⼀个T-SQL错误号最后⼀次插⼊的标识本地服务器的名值’ 只出现在查询分析器中值’,16,1) 能在前台⽤条件) begin … end条件) begin …end else begin表名 where= 值)表名列名 = 值) begin …. enda) if condition then exp_bodyend if;b) if condition then exp_bodyelse exp_body end if;c) if condition then exp_bodyelsif condition then exp_bodyelse exp_body end if;1) loop condition end loop2) while condition Loop exp_body end loop3)for varable in [REVERSE] value1...value2 (varable 变量不需声明 , ... 是范围连接符 )loop exp_body end loop别名=case条件 then 值条件 then 值值表列名值 then 值值 then 值值表a) select case 列名when 值 then 值when 值 then 值else 值end case from 表明b) select casewhen 列名=值 then 值when 列名=值 then 值else 值end case from 表:1.列类型: %TYPEvarable tableName.columnName%TYPE;varable tableName.columnName%TYPE;2.⾏类型: %ROWTYPEvarable tableName%ROWTYPE;3.使⽤⾏类型:varable.列名;异常信息’,16,1) 能在 1)⾃定义异常:a)定义异常:(位 declare和 begin之间)DECLARE varable EXCEPTION;b)显⽰引发异常(为 begin 和 end 之间):RAISE varable;2)处理预定义异常:(位 begin 和 end 之间)EXCEPTIONwhen Too_Many_ROWS thenDBMS_OUTPUT.PUT_LINE('返回多⾏');when others thenDBMS_OUTPUT.PUT_LINE('全部处理');3) 引发应⽤程序错误:RAISE_APPLICATION_ERROR(error_number,error_message);原理: ):(重复⼦查询,不能单)(只执⾏⼀次,能单独执, 查询原理: 从外(外sql⼀次查出sql)到⾥把外不查出来的值传):查询到结果可以作为表来使⼀样切套⼦查询:Select * from AuthorBook a where CopyRight =(select Max(CopyRight) from AuthorBookwhere BookName = a.BopokName)(效率低)>连接查询(效), ⽽连. 右查询有连接查完全⼀样返回多⾏⼀列完全⼀样完全⼀样:只能出现在Group by分组,不能单独使⽤group by 就没有Having完全⼀样完全⼀样相对于mssql oracle显著的书写特点:1.代码⽚段必须放到begin end .. 中2.虚拟表 dual 的使⽤3.每⾏代码强制分号";"结束,包括end4.赋值符号 :=;(select xx into xx from daul;也可以⽤于赋值)5.省略了 as...补充:⼏种关系数据库中字符编码和存储长度需要注意的⼏个问题1.mysql中char(n) varchar(n) 中再utf8编码存储⽅式下数字表⽰的是字符数,但是在其他⽅式下就根据情况定,需要再相应环境下探索⼀下。

SQLServer与MySql区别(关键字和语法)

SQL Server 和MySql 语法和关键字的区别——用于SQLServer到MySql的转换(1)mysql的ifnull()函数对应sql的isnull()函数;(2)mysql的存储过程中变量的定义去掉@;(3)mysql的每句结束要用";"(4)SQLServer存储过程的AS在MySql中需要用begin .....end替换(5)字符串连接用concat()函数;如SQLServer: Temp=’select * from ’+’tablename’+…+…MySql:Temp=concat(’select * from’, ’tablecname’,…,…)(6)mysql的uuid()对应sql的GUID();(7)MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面MySql out,in,inout的区别——MySQL 存储过程“in”参数:跟C 语言的函数参数的值传递类似,MySQL 存储过程内部可能会修改此参数,但对in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。

MySQL 存储过程“out”参数:从存储过程内部传值给调用者。

在存储过程内部,该参数初始值为null,无论调用者是否给存储过程参数设置值。

MySQL 存储过程inout 参数跟out 类似,都可以从存储过程内部传值给调用者。

不同的是:调用者还可以通过inout 参数传递值给存储过程。

(8)MySQL的if语句为if (条件) thenend if;或者If (条件) thenElseEnd if或者If(条件)thenElseif (注意不能写成Else if )Elseif…End if(9)Mysql的Execute对应SqlServer的exec;(注意:必须像下面这样调用)Set @cnt=’select * from 表名’;Prepare str from @cnt;Execute str;(10)MySql存储过程调用其他存储过程用callCall函数名(即SQLServer的存储过程名)(’参数1’,’参数2’,……)(11) mysql的日期○1获得当前日期函数:curdate(),current_date()○2获得当前时间函数:curtime();○3获得当前日期+时间:now();○4MySQL dayof... 函数:dayofweek(), dayofmonth(), dayofyear()分别返回日期参数,在一周、一月、一年中的位置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Mysql和sqlServer命令比较按语句功能划分,依次讲解目录一数据定义 (2)1 数据库操作基本命令 (2)2 CREATE TABLE --创建一个数据库表 (2)2.1PRIMARY KEY 约束(主键)区别解析: (2)2.1.1 创建primary key (2)2.1.2 撤销PRIMARY KEY 约束 (3)2.1.3 创建外健约束 (3)2.1.4 撤销外健约束 (4)2.2UNIQUE 约束(唯一的,独一无二的)区别解析 (4)2.2.1 创建UNIQUE约束 (4)2.2.2 撤销UNIQUE 约束 (5)2.3CHECK 约束 (5)2.3.1 创建CHECK约束 (5)2.3.2 撤销CHECK约束 (6)2.4DEFAULT 约束(系统默认值) (6)2.4.1 创建DEFAULT约束 (6)2.4 .2 撤消DEFAULT约束 (7)2.5索引区别 (7)2.6主键自动增加的区别 (7)2.7MySQL支持enum,和set类型,SQL Server不支持 (8)2.7.1枚举enum (8)2.7.2集合set (9)2.8MySQL不支持nchar,nvarchar,ntext类型 (10)3DROP TABLE –删除一个数据库表 (10)4显示库表 (11)5alter 修改库表 (11)二数据操作 (12)2.1 limit和top (12)2.2 ISNULL()函数 (12)2.3 select查询 (12)2.4 insert 插入 (12)2.6 update 修改 (12)2.7 delete 删除 (13)三语法定义 (13)3.1 注释符区别 (13)3.2 识别符的区别 (13)3.3存储过程的区别(未经验证,从网上找的) (13)3.4字符串连接 (14)四函数和数据类型的区别 (14)4.1 Date 函数 (14)五性能比较 (15)一数据定义1 数据库操作基本命令Mysql:create database name; 创建数据库use databasename; 选择数据库drop database name 直接删除数据库,不提醒–2 CREATE TABLE --创建一个数据库表2.1PRIMARY KEY 约束(主键)区别解析:2.1.1 创建primary keyMysql:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),PRIMARY KEY (Id_P) //声明主健写在最后)SqlServer:CREATE TABLE Persons(Id_P int NOT NULL PRIMARY KEY, //声明主健紧跟列后LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))但是如果表存在,之后给表加主健时:Mysql 和SqlServerALTER TABLE Persons ADD PRIMARY KEY (Id_P)2.1.2撤销PRIMARY KEY 约束MySQL:ALTER TABLE Persons DROP PRIMARY KEYSQL ServerALTER TABLE Persons DROP CONSTRAINT pk_PersonID2.1.3 创建外健约束MySQL:CREATE TABLE Orders(O_Id int NOT NULL,OrderNo int NOT NULL,Id_P int,PRIMARY KEY (O_Id),FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) //写在最后)SQL ServerCREATE TABLE Orders(O_Id int NOT NULL PRIMARY KEY,OrderNo int NOT NULL,Id_P int FOREIGN KEY REFERENCES Persons(Id_P) //顺序不同)如果在"Orders" 表已存在的情况下为"Id_P" 列创建FOREIGN KEY 约束,请使用下面的SQL:MySQL / SQL ServerALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)2.1.4 撤销外健约束MySQL:ALTER TABLE Orders DROP FOREIGN KEY f k_PerOrdersSQL ServerALTER TABLE Orders DROP CONSTRAINT fk_PerOrders2.2UNIQUE 约束(唯一的,独一无二的)区别解析UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 拥有自动定义的UNIQUE 约束。

请注意,每个表可以有多个UNIQUE 约束,但是每个表只能有一个PRIMARY KEY 约束。

2.2.1 创建UNIQUE约束MySQL:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),UNIQUE (Id_P) //写在最后)SQL ServerCREATE TABLE Persons(Id_P int NOT NULL UNIQUE, //紧跟列后LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))2.2.2 撤销UNIQUE 约束MySQL:ALTER TABLE Persons DROP INDEX uc_PersonIDSQL ServerALTER TABLE Persons DROP CONSTRAINT uc_PersonID2.3CHECK 约束CHECK 约束用于限制列中的值的范围。

如果对单个列定义CHECK 约束,那么该列只允许特定的值。

如果对一个表定义CHECK 约束,那么此约束会在特定的列中对值进行限制。

2.3.1 创建CHECK约束下面的SQL 在"Persons" 表创建时为"Id_P" 列创建CHECK 约束。

CHECK 约束规定"Id_P" 列必须只包含大于0 的整数。

My SQL:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),CHECK (Id_P>0) //写在最后)SQL ServerCREATE TABLE Persons(Id_P int NOT NULL CHECK (Id_P>0), //紧跟列后LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))如果需要命名CHECK 约束,以及为多个列定义CHECK 约束,请使用下面的SQL 语法:MySQL / SQL Server:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') //多个条件)如果在表已存在的情况下为"Id_P" 列创建CHECK 约束,请使用下面的SQL:MySQL / SQL Server:ALTER TABLE Persons ADD CHECK (Id_P>0)2.3.2 撤销CHECK约束Sqlserver:ALTER TABLE Persons DROP CONSTRAINT chk_PersonMysql我没有找到怎么删除。

2.4DEFAULT 约束(系统默认值)DEFAULT 约束用于向列中插入默认值。

如果没有规定其他的值,那么会将默认值添加到所有的新纪录。

2.4.1 创建DEFAULT约束下面的SQL 在"Persons" 表创建时为"City" 列创建DEFAULT 约束:My SQL / SQL Server:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255) DEFAULT 'Sandnes' //紧跟列后,默认值字符串Sandnes)通过使用类似GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:CREATE TABLE Orders(Id_O int NOT NULL,OrderNo int NOT NULL,Id_P int,OrderDate date DEFAULT GETDATE() //紧跟列后,函数)如果在表已存在的情况下为"City" 列创建DEFAULT 约束,请使用下面的SQL:MySQL:ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'SQL Server:ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDNES'2.4 .2 撤消DEFAULT约束MySQL:ALTER TABLE Persons ALTER City DROP DEFAULTSQL Server:ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT2.5索引区别CREATE INDEX 语句CREATE INDEX 语句用于在表中创建索引。

相关文档
最新文档