sql刪除非空的約束
① 如何用sql語句刪除check約束
1、創建測試表,帶主鍵約束;
create table student2
(Sno char(9) primary key,
Sname char(8) not null,
Ssex char(2) check(Ssex in ('男','女')),
Sage smallint,
Sdept char(20)
)
② My sql里一張表有一列為非空約束,現在想把這個約束去掉,用sql怎麼寫啊要SQL,有大蝦知道嗎
ALTER TABLE [表名] DROP Constraint [列名]
③ SQl問題非空約束
樓主可以這樣試試,我用過很多次的絕對可以
首先update
dbo.T_user
set
user_Password=''
where
user_Password
is
null
然後在設置非空
alter
table
dbo.T_user
alter
column
user_Password
varchar(20)
not
null
這樣就可以讓欄位
user_Password
不允許null
這樣就可以把user_Password
欄位改成
varchar(20)
not
null
了
如果樓主想要不能空的約束,那個就要做觸發器了
④ 如何用sql語句刪除外鍵約束
用sql語句刪除外鍵約束的具體步驟如下:
我們需要准備的材料分別是:電腦、SQL SERVER 2008。
1、首先我們用SQL SERVER 2008打開需要刪除外鍵約束的表,滑鼠右鍵點擊左側的「dbo」選項選擇「設擊」。
⑤ oracle 怎麼刪除非空約束
alter table 表 drop constraint 非空約束名稱;
或者用pl/sql的sql窗口->右鍵表名->選擇編輯->列選項卡->勾選對應列的「可為空」選項
⑥ 資料庫中怎樣刪除約束
資料庫中刪除約束的方法:
1、sql
server中刪除約束的語句是:
alter
table
表名
drop
constraint
約束名
sp_helpconstraint
表名
找到數據表中的所有列的約束
2、oracle中刪除約束的語句:
先找到表的約束名稱,執行:
select
*
from
user_constraints;
其中
CONSTRAINT_NAME
為表的約束名稱
然後刪除約束:
alter
table
表名
drop
constraint
約束名
cascade;
3、mysql中刪除約束的語句是:
1)刪除主鍵約束:
alter
table
表名
drop
primary
key;
2)刪除外鍵約束:alter
table
表名
drop
foreign
key
外鍵(區分大小寫);
⑦ SQL中的幾種約束的創建與刪除
約束的目的就是確保表中的數據的完整性。
常用的約束類型如下:
主鍵約束:(Primary Key constraint) 要求主鍵列唯一,並且不允許為空
唯一約束:(Unique Constraint) 要求該列唯一,允許為空,但只能出現一個空值
檢查約束:(Check Constraint) 某列取值范圍限制、格式限制等。如有關年齡的限制
默認約束:(Default Constraint) 某列的默認值,如我們的男性學員比較多,性別默認為男
外鍵約束:(Foreign Key Constraint) 用於在兩表之間建立關系,需要指定引用主表的哪一列
一、添加約束
在創建表時,我們可以在欄位後添加各種約束,但一般不這樣混用,推薦將添加約束和建表的語句分開編寫。
添加約束的語法如下:
Code:
Alter Table 表名
Add Constraint 約束名 約束類型 具體的約束類型
上述語法標識修改某個表,添加某個約束,其中約束名的命名規則推薦採用"約束類型_約束欄位"這樣的形式。
Code:
---添加主鍵約束
Alter Table stuInfo
Add Constraint PK_stuNO primary Key(stuNo)
---添加唯一約束
Alter Table stuInfo
Add Constraint UQ_stuID unique(stuID)
---添加默認約束
Alter Table stuInfo
Add Constraint DF_stuAddress default('地址不詳') for stuAddress
---添加檢查約束
Alter Table stuInfo
Add Constraint CK_stuAge check(stuAge between 15 and 40)
---添加外鍵約束
Alter Table stuMarks
Add Constraint FK_stuNo foreign key(stuNo) references stuInfo(stuNo)
二、刪除約束
如果錯誤的添加了約束,則可以刪除約束
刪除約束的語法如下:
Code:
Alter Table 表名
Drop Constraint 約束名
附加:在創建表的時候同時添加約束的寫法:
Code:
use stuDB
go
if exists(select * from Sysobjects where name = 'stuInfo')
drop table stuInfo
go
create table stuInfo
(
stuName varchar(20) not null primary key(stuName)
,stuID int not null unique(stuID)
,stuAddress varchar(20) not null default('地址不詳')
,stuAge int not null check(stuAge between 15 and 40)
)
⑧ mysql 如何刪除非空約束
NULL 對外部程序來說,具體為不知道、不確切的、無法表述的值。所以在很多家公司的開發規范里都明確規定了,必須為 NOT NULL。
其實用到 NULL 的場景都可以轉換為有意義的字元或者數值,一是有利用數據的易讀性以及後期的易維護性;二是降低 SQL 語句的編寫難度。
關於 NULL 的特性如下:
1. 參與 NULL 欄位拼接的結果都為 NULL,預期的可能會有差異
預想把欄位 r1 做個拼接,再插入到新的表 t3 里,結果 t3 表的記錄全為 NULL,跟預期不符。
mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`r1` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> show create table t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`r1` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> create table t3 like t1
Query OK, 0 rows affected (0.04 sec)
mysql> insert into t3 select concat(r1,'database') from t1 limit 2;
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t3;
+------+
| r1 |
+------+
| NULL |
| NULL |
+------+
2 rows in set (0.00 sec)
那正確的方法如下,對 NULL 用函數 IFNULL 特殊處理。
mysql> insert into t3 select concat(ifnull(r1,''),'database') from t1 limit 2;
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t3;
+----------+
| r1 |
+----------+
| database |
| database |
+----------+
2 rows in set (0.00 sec)
2. 對於包含 NULL 列的求 COUNT 值也不準確
t1 和 t2 的記錄數是一樣的,但是欄位 r1 包含了 NULL,這導致結果忽略了這些值。
mysql> select count(r1) as rc from t1;
+-------+
| rc |
+-------+
| 16384 |
+-------+
1 row in set (0.01 sec)
mysql> select count(r1) as rc from t2;
+-------+
| rc |
+-------+
| 32768 |
+-------+
1 row in set (0.03 sec)
這時候我們可能想到了,正確的方法是用 NULL 相關函數處理,
mysql> select count(ifnull(r1,'')) as rc from t1;
+-------+
| rc |
+-------+
| 32768 |
+-------+
1 row in set (0.03 sec)
或者是直接用 COUNT(*) 包含了所有可能的值
mysql> select count(*) as rc from t1;
+-------+
| rc |
+-------+
| 32768 |
+-------+
1 row in set (0.02 sec)
當然了不僅僅是 COUNT,除了 NULL 相關的函數,大部分對 NULL 處理都不友好。
所以其實從上面兩點來看,NULL 的處理都得特殊處理,額外增加了編寫 SQL 的難度。
3. 包含 NULL 的索引列
對包含 NULL 列建立索引,比不包含的 NULL 的欄位,要多佔用一個 BIT 位來存儲。
示例
key_len 分別為 43 和 42,t1 比 t2 多了一個位元組,那這里可能有人要問了,不是說佔了一個 BIT 位嗎?那為什麼多了一個位元組?可以關注我上一篇文章(第02期:MySQL 數據類型的藝術 - 大對象欄位)關於 BIT 的詳細描述。
mysql> pager grep -i 'key_len'
PAGER set to 'grep -i 'key_len''
mysql> explain select * from t1 where r1 = ''\G
key_len: 43
1 row in set, 1 warning (0.00 sec)
mysql> explain select * from t2 where r1 = ''\G
key_len: 42
1 row in set, 1 warning (0.00 sec)
4. 各存儲引擎相關的對 NULL 的處理
在 MySQL 8.0 發布後,僅有 InnoDB、MyISAM 和 Memory 支持對包含 NULL 列的索引,其他引擎不支持。比如 NDB。
⑨ orcl 如何刪除非空約束
alter table 表 drop constraint 非空約束名稱;
好吧我承認是Copy過來的,可以在測試庫里測試下。。