加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer笔记

发布时间:2020-12-12 14:59:18 所属栏目:MsSql教程 来源:网络整理
导读:? 数据库数据类型: 为了设计结构良好的数据库,需要遵守一些专门的规则,称为数据库的设计范式 。 第一范式(1NF)的目标:确保每列的原子性。 第二范式(2NF)的目标:确保表中的每列,都和主键相关 第三范式(3NF)的目标:确保每列都和主键列直接相关,
?

数据库数据类型:

为了设计结构良好的数据库,需要遵守一些专门的规则,称为数据库的设计范式 。

第一范式(1NF)的目标:确保每列的原子性。

第二范式(2NF)的目标:确保表中的每列,都和主键相关

第三范式(3NF)的目标:确保每列都和主键列直接相关,而不是间接相关

?

删除数据库中的表《两种方法》

Truncate Table <表名>

TRUNCATE? TABLE? Students=DELETE FROM Students

Truncate与Delete的共性

????????????? 都可用作表数据删除

Truncate与Delete的区别

????????????? Tuncate称之为截断,效率更高,不记录在日志文件中,也将不可恢复。

限制固定行数:

SELECT TOP 5 SName,SAddress

FROM Students WHERE SSex = 0

返回百分之多少行:(top 28 percent)

SELECT TOP 20 PERCENT SName,SAddress

FROM Students WHERE SSex = 0

?

--把密码列中的O换成0,并把i换成1

《方法一》

Update Card Set PassWord = Replace(PassWord,'O','0')

Update Card Set PassWord = Replace(PassWord,'i','1')

《方法二》

Update ?????? Card

Set PassWord = Replace(Replace(PassWord,'0'),'1')

--聚合函数《sum()》

SELECT SUM(ytd_sales) FROM titles WHERE type = 'business'

--《agv()》

SELECT AVG(SCore) AS 平均成绩

From Score WHERE Score >=60

--max,min

SELECT AVG(SCore) AS 平均成绩,MAX (Score) AS 最高分,

MIN (Score) AS 最低分 From Score WHERE Score >=60

--count(*)计数器

SELECT COUNT (*)? AS 及格人数 From Score

WHERE Score>=60

--关键字联合查询

SELECT * FROM shopping.wares w

WHERE w.`WareID` like '%1%' and Company like '%公司%' and Addr like '%%';

Like 查询【值必须加引号】

select * from goods where BUyNumber like '1%' and userID like '%3' and createtime like '%2010-05-17%' and goodsID like '%%';

?

//查看创建表的脚本代码

Show create table 表名

?

Mysql中时间类型TIMESTAMP

// 使用事务机制操作数据库

??? // 注意:把数据库中表的引擎设置为InnoDB ,MySQL中只有InnoDB引擎支持事务

在mysql中如果给类型为Timestamp列中插入null,或者在插入新行时没有给timestamp列赋值,mysql将自动将时间设置为当前的日期和时间。

MYSQl中AUTO_INCREMENT(auto_increment)自动增长/加,从1 开始

Eg。 userID int auto_increment not null primary key,

alter table test add price float(20.3);--保留两位小数

update test set price=2099.12512; 表中为:2099.13

查询前N条记录【limit N】(类似sqlServer top N)

/*****MY SQL查询限制条数*****/

SELECT * FROM users u limit 2;??????????????? 返回前两条记录

SELECT * FROM users u order by id limit 1,1;? 返回第2条记录(两个参数:偏移/限制行数)

分页:如果每页显示10条结果,第一页用limit 0,10 ;第二页用 limit 10,10

/*****SQL SERVER查询限制条数******/

select top 3 * from users where LoginPwd=1 and sex like '%男%';

常用数据库URL的形式:

l? SQL Server2005 :

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

l? String uri = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=employeeAdmin";

l? Oracle 9I和10g:

Jdbc:oracle:thin:@localhost:1521:ORCL

l? MySQL:(DreiverClass:com.mysql.jdbc.Driver)

Jdbc:mysql://localhost:3306/databasename

l? JDBC—ODBC桥

Sun.jdbc.odbc.JdbcOdbcDriver

JDBC URL是:jdbc:odbc:datasource-name

?

?

JNDI连接池配置

Context.xml

<?xml version="1.0" encoding="UTF-8"?>

<Context reloadable="true">

<Resource name="bookstore" auth="Container"

type="javax.sql.DataSource"

maxActive="100" maxIdle="30" maxWait="10000"

username="root" password="root"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/bookstore?autoReconnect=true">

</Resource>

</Context>

?

Jsp or servlet get Connection

Context ctx=new InitialContext();

DataSource ds = (DataSource) ctx.lookup("java:comp/env/bookstore");

conn = ds.getConnection();

?

?

?

?

使用事务处理回滚

Connection conn;

conn.setAutoCommit(false);//自动提交??????????????? conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);

sql语句·······

conn.rellback();//conn.commit();

//事务隔离级别

//以下 Connection 常量之一:Connection.TRANSACTION_READ_UNCOMMITTED、?指示可以发生脏读 (dirty read)、不可重复读和虚读 (phantom read) 的常量。Connection.TRANSACTION_READ_COMMITTED/?指示不可以发生脏读的常量;不可重复读和虚读可以发生。

//Connection.TRANSACTION_REPEATABLE_READ ??指示不可以发生脏读和不可重复读的常量;虚读可以发生。

或 Connection.TRANSACTION_SERIALIZABLE指示不可以发生脏读、不可重复读和虚读的常量。。(注意,不能使用 Connection.TRANSACTION_NONE,因为它指定了不受支持的事务。)

创建索引

l? 何时使用索引

如果对表的操作以查询为主,即经常从表中查询数据,很少有插入、修改和删除操作,这种情况需要使用索引来改进查询性能。

如果对表的操作以更新为主,即经常对表进行插入、修改和删除操作,很少有查询操作,这种情况不适合于使用索引。

索引可以由系统自动创建,也可以由用户手工创建。

创建主键约束时,系统会自动创建唯一聚集索引(与物理存贮一一对应如书目录);创建唯一约束时,系统会自动创建唯一非聚集索引(非与物理存贮一一对应,如书附录单词表)。

?

l? 使用CREATE INDEX语句创建聚集索引

--创建聚集索引,索引列为cno

?

create clustered index IX_Course_cno【索引名】

on Course【表名】

(cno)【列名】

?

l? 使用CREATE INDEX语句创建唯一聚集索引【不允许索引列出现重复值的聚集索引】

如果在表中设置了主键系统将自动创建唯一聚集索引

--创建唯一聚集索引,索引列为DepartmentID

?

create unique clustered index IX_Department_DepartmentID

on Department

(DepartmentID)

l? 使用CREATE INDEX语句创建非聚集索引

?

--创建非聚集索引,索引列为tname

?

create nonclustered index IX_Teacher_tname

on Teacher

(tname)

?

l? 使用CREATE INDEX语句创建唯一非聚集索引

?

--创建唯一非聚集索引,索引列为cname

?

create unique nonclustered index IX_Course_cname

on Course

(cname)

l? 查看索引,有两种方式:

?? 使用管理平台查看索引。

?? 使用系统存储过程(sp_helpindex 表名)查看索引。

?

l? 修改索引:

注意:如果禁用了聚集索引,将导致表中的数据不可用,也就是不能对该表进行查询、插入、修改和删除操作。

?? 使用系统存储过程sp_rename重命名索引

--重命名索引

sp_rename 'Student.uqSname','IX_Student_sname','index'

?? 使用ALTER INDEX语句禁用索引

--禁用索引

alter index IX_Student_sname

on Student

disable

?? 使用ALTER INDEX语句禁用索引

--禁用索引

alter index IX_Student_sname

on Student

disable

?? 使用DROP INDEX语句删除索引。

drop index Teacher.IX_Teacher_tname

Insert出现“只允许出现标量表达式”的错误

Insert into a (a1,a2,a3) values (1,select num from b where id=1,3)? 这样select语句出现在赋值语句中是不允许的。

可以这样:

insert into a (a1,a3) select 1,num,3 from b where id=1 即可解决

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读